python - 计算 pandas 数据框行中 Python 列表中元素的出现次数

我正在尝试计算每行列表中每个字符串的出现次数。

+----+---------------------------+
| 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/

相关文章:

python - 如何处理在 FastAPI 中混淆的路径操作?

r - 如何在R中自动使函数的结果成为同一函数的参数

python - 如何按列导出数据框以分隔 csv 文件?以及如何将不同数据框中的列附加到分离的 c

caching - Aerospike 为特定字段设置到期日期

c++ - 创建其他对象时如何使用同一个对象实例?

python - 如果数字在 Pandas 的指定范围内,如何返回值

delphi - 组件是特定类 - 在 BPL 结构中不起作用

kotlin - 如何将 `throw` 放入辅助函数中但仍然具有空安全性?

r - 如何在 R 中生成向量的所有可能的连续 n 元组?

r - 选择仅连续运行特定值的组