[英]Count occurrences in a list for each row and specific column in a dataframe
我一直在尝试在Python 3.7中使用collection.Counter
或value_counts
来做类似下面的 df 的事情,但我没有成功。 到目前为止,这是我想要得到的一个例子:
IDs Col2 Col3
0 123 [A, A, B, B, C] {A:2, B:2, C:1}
1 456 [A, B, C, C] {A:1, B:1, C:2}
2 789 [A, A, A, D, D] {A:3, D:2}
然后我需要为每个对应行获取Col3
中的最大值,如果有平局,则仅在新列中显示它,并仅使用关联的键。 像这样的东西:
IDs Col2 Col3 Max
0 123 [A, A, B, B, C] {A:2, B:2, C:1} {A:2, B:2}
1 456 [A, B, C, C] {A:1, B:1, C:2} {C:2}
2 789 [A, A, A, D, D] {A:3, D:2} {A:3}
如果值为max
,则使用 dict 理解和测试:
from collections import Counter
df = pd.DataFrame({'Col1':[123,456,789],
'Col2':[list('AABBC'), list('ABCC'), list('AAADD')]})
df['Col3'] = df['Col2'].apply(Counter)
df['Max'] = df['Col3'].apply(lambda x: {k:v for k, v in x.items() if max(x.values()) == v})
感谢@Keyur Potdar 提出另一个使用most_common
的想法:
f = lambda x: {k:v for k, v in x.items() if x.most_common(1)[0][1] == v}
df['Max'] = df['Col3'].apply(f)
print (df)
Col1 Col2 Col3 Max
0 123 [A, A, B, B, C] {'A': 2, 'B': 2, 'C': 1} {'A': 2, 'B': 2}
1 456 [A, B, C, C] {'A': 1, 'B': 1, 'C': 2} {'C': 2}
2 789 [A, A, A, D, D] {'A': 3, 'D': 2} {'A': 3}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.