繁体   English   中英

计算 dataframe 中每一行和特定列在列表中的出现次数

[英]Count occurrences in a list for each row and specific column in a dataframe

我一直在尝试在Python 3.7中使用collection.Countervalue_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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM