![](/img/trans.png)
[英]Multiple column groupby with pandas to find maximum value for each group
[英]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.