我有一个包含三列 ID、Col1 和 Col2 的数据框。我想按 ID 和 Col1 对 df 进行分组,并删除 Col1 中低于 Col2 中的值的所有值。
import pandas as pd
df = pd.DataFrame({'ID': ['A', 'A', 'A', 'A', 'B', 'B', 'B']},
{'Col1': [0, 1, 2, 4, 0, 1, 2]},
{"Col2": [1, 1, 1, 1, 2, 2, 2]})
ID Col1 Col2
0 A 0 1
1 A 1 1
2 A 2 1
3 A 4 1
4 B 0 2
5 B 1 2
6 B 2 2
最终结果应该是这样的
ID Col1
0 A 1
1 A 2
2 A 4
3 B 2
我可以通过迭代数据帧并将其分成 block 来做到这一点,但是使用 Pandas 函数必须有一种更简单、更快的方法。
最佳答案
我认为groupby
没有必要,使用boolean indexing
仅使用 loc
按名称过滤列:
df1 = df.loc[df['Col1'].ge(df['Col2']), ['ID', 'Col1']]
#alternative
#df1 = df.loc[df['Col1'] >= df['Col2'], ['ID', 'Col1']]
print (df1)
ID Col1
1 A 1
2 A 2
3 A 4
6 B 2
关于Python Pandas 根据另一列对值进行分组和排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51498873/