Python Pandas: select 行基于跨行比较

Python Pandas: select rows based on comparison across rows

在下面的数据框中,第一列是偶尔包含非唯一值的索引。

|   | col1 |
|---|------|
| A |  120 |
| A |   90 |
| A |   80 |
| B |   80 |
| B |   50 |
| C |  120 |
| D |  150 |
| D |  150 |

我想要 select 行,以便我可以获得以下数据框。

|   | col1 |
|---|------|
| A |  120 |
| B |   80 |
| C |  120 |
| D |  150 |

基本上,我只想让第一行与索引的唯一值相关联。

试试这个。

import pandas as pd
import numpy as np

index = 'A A A B B C D D'.split()
col1 = [120, 90, 80, 80, 50, 120, 150, 150]
ser = pd.Series(col1, index=index)
# use groupby and keep the first element
ser.groupby(level=0).first()

Out[200]: 
A    120
B     80
C    120
D    150
dtype: int64

这是一个例子:

我们从一个看起来像这样的数据框开始

      | col |
-------------
   A  |  1  |
   B  |  2  |
   B  |  3  |
   C  |  4  |
   C  |  5  |
   C  |  6  |

使用groupby方法

import pandas as pd
df = pd.DataFrame(index=['a', 'b', 'b', 'c', 'c', 'c'],
                  data=[1, 2, 3, 4, 5, 6], columns=['col'])

group = df.groupby(level=0)
df = group.first()

最后:

      | col |
-------------
   A  |  1  |
   B  |  2  |
   C  |  4  |

如果您想保留每个索引的最后一个值,您可以使用 group.last()