pandas panda:如何检查列中的某个值在每个组中重复maximum一次(在groupby之后)

jpfvwuh4  于 2022-12-25  发布在  其他
关注(0)|答案(1)|浏览(117)

我有一个PandasDataFrame,我想按A列分组,并检查B组中的某个值("test")在每组中重复的次数不超过一次。
Pandas有没有一种土生土长的方式来做以下事情:
1-查找B列中出现多次"test"的组?
2-删除其他事件(保留C列中具有最小值的事件)。
示例:

A   B       C
0   1   test    342
1   1   t       4556
2   1   te      222
3   1   test    56456
4   2   t       234525
5   2   te      123
6   2   test    23434
7   3   test    777
8   3   tes     665

如果我按"A"分组,我得到"tests"在A == 1中出现两次,这是我想要处理情况。

9lowa7mx

9lowa7mx1#

按列A,B删除重复test值的解决方案-保留每组的第一个值:

df = df[df.B.ne('test') | ~df.duplicated(['A','B'])]
print (df)
   A     B       C
0  1  test     342
1  1     t    4556
2  1    te     222
4  2     t  234525
5  2    te     123
6  2  test   23434
7  3  test     777
8  3   tes     665

编辑:如果需要最小CB中的test匹配,并且需要所有可能重复的最小C值,请通过GroupBy.transform进行比较,并将C替换为Series.mask中的NaN

m = df.B.ne('test')
df = df[m | ~df.C.mask(m).groupby(df['A']).transform('min').ne(df['C'])]

但是,如果只需要第一个复制的test值,则使用DataFrameGroupBy.idxmin和过滤的DataFrame:

m = df.B.ne('test')
m1 = df.index.isin(df[~m].groupby('A')['C'].idxmin())

df = df[m | m1]

溶液差异:
一个三个三个一个

相关问题