如何计算 Python Pandas 中逗号分隔列的出现次数

How to count the number of occurrences on comma delimited column in Python Pandas

如何计算整个列列表中逗号分隔值的出现次数

数据框是这样的:

id column
1   
2   1
3   1
4   1,2
5   1,2
6   1,2,4
7   1,2,4
8   1,2,4,6
9   1,2,4,6
10  1,2,4,6,8
11  1,2,4,6,8

期望的输出是:

id column count
1.         10
2   1.     7    
3   1.     0
4   1,2.   6
5   1,2.   0
6   1,2,4. 4  
7   1,2,4.  0
8   1,2,4,6. 2
9   1,2,4,6. 0
10  1,2,4,6,8 0
11  1,2,4,6,8 0

试过这个:

df = pd.read_csv('parentsplit/parentlist.csv')
df['count'] = df['parent_list'].str.split(',', expand=True).stack().value_counts()


它不工作。

您可以进行如下操作:

df['count'] = df['id'].apply(lambda x: df['column'].fillna('X').str.contains(str(x)).sum())

这基本上是计算列中每个 id 出现的次数。

输出:

    id     column  count
0    1       None   10
1    2          1    8
2    3          1    0
3    4        1,2    6
4    5        1,2    0
5    6      1,2,4    4
6    7      1,2,4    0
7    8    1,2,4,6    2
8    9    1,2,4,6    0
9   10  1,2,4,6,8    0
10  11  1,2,4,6,8    0

拆分并展开列,然后 count 使用 value_counts 出现的次数,然后将计数映射到 id

s = df['column'].str.split(',').explode().value_counts()
df['count'] = df['id'].astype(str).map(s).fillna(0)

    id     column  count
0    1       None   10.0
1    2          1    8.0
2    3          1    0.0
3    4        1,2    6.0
4    5        1,2    0.0
5    6      1,2,4    4.0
6    7      1,2,4    0.0
7    8    1,2,4,6    2.0
8    9    1,2,4,6    0.0
9   10  1,2,4,6,8    0.0
10  11  1,2,4,6,8    0.0

一种快速的方法是不使用 pandas 方法,而是使用纯 python:itertools.chaincollections.Counter

from itertools import chain
from collections import Counter
c = Counter(chain(*df['column'].str.split(',').values))
df['count'] = df['id'].astype(str).map(c)

输出:

    id     column  count
0    1                10
1    2          1      8
2    3          1      0
3    4        1,2      6
4    5        1,2      0
5    6      1,2,4      4
6    7      1,2,4      0
7    8    1,2,4,6      2
8    9    1,2,4,6      0
9   10  1,2,4,6,8      0
10  11  1,2,4,6,8      0