我有一个包含 A、B 和 C 列的 DataFrame。对于 A 的每个值,我想选择 B 列中具有最小值的行。
也就是说,从这个:
df = pd.DataFrame({'A': [1, 1, 1, 2, 2, 2],
'B': [4, 5, 2, 7, 4, 6],
'C': [3, 4, 10, 2, 4, 6]})
A B C
0 1 4 3
1 1 5 4
2 1 2 10
3 2 7 2
4 2 4 4
5 2 6 6
我想得到:
A B C
0 1 2 10
1 2 4 4
目前,我按 A 列分组,然后创建一个值,向我指示我将保留的行:
a = data.groupby('A').min()
a['A'] = a.index
to_keep = [str(x[0]) + str(x[1]) for x in a[['A', 'B']].values]
data['id'] = data['A'].astype(str) + data['B'].astype('str')
data[data['id'].isin(to_keep)]
我相信有一种更直接的方法可以做到这一点。我在这里看到许多使用 MultiIndex 的答案,我宁愿避免使用它。
谢谢您的帮助。
原文由 Wendy 发布,翻译遵循 CC BY-SA 4.0 许可协议
我觉得你想多了。只需使用
groupby
和idxmin
: