我有一个像这样的数据框:
import pandas as pd df = pd.DataFrame({'A': list(range(7)), 'B': ['a', 'b', 'a', 'c', 'c', 'b', 'b'], 'C': ['x', 'x', 'x', 'z', 'z', 'y', 'x']} ) A B C 0 0 a x 1 1 b x 2 2 a x 3 3 c z 4 4 c z 5 5 b y 6 6 b x
我想要groupby列B,C然后从中选择df组大小大于 1 的所有行。
groupby
B
C
df
我希望的结果是
A B C 0 0 a x 1 1 b x 2 2 a x 3 3 c z 4 4 c z 6 6 b x
所以我可以做
gs_bool = df.groupby(['B', 'C']).size() > 1
由此得出
B C a x True b x True y False c z True dtype: bool
我现在该如何将其反馈给df?
您真的很接近-需要GroupBy.transform:
GroupBy.transform
gs_bool = df.groupby(['B', 'C'])['B'].transform('size') > 1 print (gs_bool) 0 True 1 True 2 True 3 True 4 True 5 False 6 True Name: B, dtype: bool
df = df[gs_bool] print (df) A B C 0 0 a x 1 1 b x 2 2 a x 3 3 c z 4 4 c z 6 6 b x