我正在尝试计算每行列表中每个字符串的出现次数。
+----+---------------------------+
| Id | Col1 |
+----+---------------------------+
| N1 | ['a', 'b', 'c', 'a'] |
| N2 | ['b', 'b', 'b'] |
| N3 | [] |
| N4 | ['a', 'b', 'c', 'a', 'c'] |
| N5 | [] |
+----+---------------------------+
结果我想得到这样的东西:
+----+---------------------------+-----------------------+
| Id | Col1 | Col2 |
+----+---------------------------+-----------------------+
| N1 | ['a', 'b', 'c', 'a'] | {'a':2, 'b':1, 'c':1} |
| N2 | ['b', 'b', 'b'] | {'b':3} |
| N3 | [] | {} or None |
| N4 | ['a', 'b', 'c', 'a', 'c'] | {'a':2, 'b':1, 'c':2} |
| N5 | [] | {} or None |
+----+---------------------------+-----------------------+
已经尝试通过不同的方法从 DataFrame 中的集合库中使用 Counter,但似乎没有任何效果。
d = {'Id': ['N1', 'N2', 'N3', 'N4', 'N5'],
'Col1': [['a', 'b', 'c', 'a'], ['b', 'b', 'b'], [], ['a', 'b', 'c', 'a', 'c'], []]}
df = pd.DataFrame(data = d)
最佳答案
很简单:
from collections import Counter
df['col_2'] = df.Col1.map(Counter)
>>> df
'''
Id Col1 col_2
0 N1 [a, b, c, a] {'a': 2, 'b': 1, 'c': 1}
1 N2 [b, b, b] {'b': 3}
2 N3 [] {}
3 N4 [a, b, c, a, c] {'a': 2, 'b': 1, 'c': 2}
4 N5 [] {}
https://stackoverflow.com/questions/73235215/