我有一个包含三列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
我可以通过遍历数据帧并将其拆分为大块来做到这一点,但是使用Pandas函数必须有一种更简单,更快的方法。
答案 0 :(得分:2)
我认为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
答案 1 :(得分:2)
您可以使用pd.DataFrame.query
。由于您不执行汇总,因此不需要groupby
。
res = df.query('Col1 >= Col2')[['ID', 'Col1']]
print(res)
ID Col1
1 A 1
2 A 2
3 A 4
6 B 2