Python Pandas分组并基于另一列排除值

时间:2018-07-24 12:40:11

标签: python pandas dataframe

我有一个包含三列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函数必须有一种更简单,更快的方法。

2 个答案:

答案 0 :(得分:2)

我认为groupby不是必需的,仅将boolean indexingloc一起使用以按名称过滤列:

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