簡體   English   中英

pandas:如何檢查列中的某個值是否在每個組中重復最大值一次(在 groupby 之后)

[英]pandas: how to check that a certain value in a column repeats maximum once in each group (after groupby)

我有一個 pandas DataFrame,我想按 A 列分組,並檢查 B 組中的某個值('test')是否在每個組中重復一次以上。

是否有熊貓本機方法可以執行以下操作:
1 - 找到“測試”多次出現在 B 列中的組?
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”分組,我會得到“測試”在 A==1 中出現兩次,這是我想要處理的情況。

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

編輯:如果需要B中的最小C匹配test ,並且需要通過GroupBy.transform比較所有可能重復的最小C值,並在Series.mask C替換為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]

解決方案的區別:

print (df)
    A     B       C
-2  1  test     342
-1  1  test     342
 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
 
m = df.B.ne('test')
df1 = df[m | ~df.C.mask(m).groupby(df['A']).transform('min').ne(df['C'])]
print (df1)
    A     B       C
-2  1  test     342
-1  1  test     342
 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

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

df2 = df[m | m1]
print (df2)
    A     B       C
-2  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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM