[英]pandas - groupby, count values and remove equal occurrences
从这个问题和以下数据帧df开始:
U,C,G
111,ar,1
112,es,1
112,es,1
112,es,2
113,en,2
113,en,3
113,en,3
114,ca,4
112,es,1
112,es,1
112,es,1
115,it,1
115,it,2
115,it,3
我以这种方式对值进行分组和计数:
grouped = df.groupby(['U','G'])['C'].value_counts()
然后保持每个组的最大值:
mask = grouped.groupby(level='U').apply(lambda g: g == g[g.idxmax()])
grouped = grouped[mask]
获得:
U G
111 1 ar 1
112 1 es 5
113 3 en 2
114 4 ca 1
115 1 it 1
2 it 1
3 it 1
现在,一些U
在值上具有多个相等的出现。 我的目标是仅保留U
行且仅出现一次,而丢弃其他行。 在此示例中,结果数据帧将丢弃115
组。
>>> grouped[ grouped.groupby(level='U').transform('count') == 1 ]
U G
111 1 ar 1
112 1 es 5
113 3 en 2
114 4 ca 1
也可以做:
>>> grouped[ grouped.groupby(level='U').rank(method='max') == 1 ]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.