假设我有一个包含3列的数据框:A, B, C
。我希望按列A
进行分组,并找到C
中包含最大条目的行(对于每个唯一的A),以便我可以将row.A, row.B, row.C
存储到其他地方的字典中。 / p>
在不使用iterrows
的情况下,最好的方法是什么?
答案 0 :(得分:3)
# generate sample data
import pandas as pd
df = pd.DataFrame(np.random.randint(0,10,(10,3)))
df.columns = ['A','B','C']
# sort by C, group by A, take last row of each group
df.sort('C').groupby('A').nth(-1)
答案 1 :(得分:1)
这是另一种方法。如果df
是DataFrame,则可以编写df.groupby('A').apply(lambda d: d.ix[d['C'].argmax()])
。
例如,
In [96]: df
Out[96]:
A B C
0 1 0 3
1 3 0 4
2 0 4 5
3 2 4 0
4 3 1 1
5 1 6 2
6 3 6 0
7 4 0 1
8 2 3 4
9 0 5 0
10 7 6 5
11 3 1 2
In [97]: g = df.groupby('A').apply(lambda d: d['C'].argmax())
In [98]: g
Out[98]:
A
0 2
1 0
2 8
3 1
4 7
7 10
dtype: int64
In [99]: df.ix[g.values]
Out[99]:
A B C
2 0 4 5
0 1 0 3
8 2 3 4
1 3 0 4
7 4 0 1
10 7 6 5