Python Pandas 根据另一列对值进行分组和排除

标签 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

我可以通过迭代数据帧并将其分成 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/

相关文章:

python - 列值的 pct_change

python - 带或不带奇偶校验的 RS232 字长

python - 奇怪的视频间歇性错误 (GStreamer)

python - Pandas,如何将 pd.Dataframe 作为函数中的参数

r - 根据其他列数据框 r 中的值添加列

python - DataFrame Pandas - 使用索引和列名作为新列名展平数据框

python - Django 如何从 TemplateView 找到正确的 Template 变量

python - 查找落在给定范围之间的索引

python - Pandas:如何在 MultiIndex 中格式化图例

python - 根据时间戳和不同位置创建 session