【问题标题】:How to count the number of occurrences on comma delimited column in Python Pandas如何计算 Python Pandas 中逗号分隔列的出现次数
【发布时间】:2022-01-10 10:01:34
【问题描述】:

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

数据框是这样的:

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()


它不工作。

【问题讨论】:

  • 你能解释一下count的逻辑吗?
  • @MayankPorwal 我什至不确定专栏背后的逻辑。 2-9 好像有经期,但 1 或 10-11 没有经期。

标签: python pandas dataframe csv spreadsheet


【解决方案1】:

一种快速的方法是不使用 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

【讨论】:

    【解决方案2】:

    你可以这样做:

    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
    

    【讨论】:

      【解决方案3】:

      拆分并分解该列,然后使用value_counts 将出现次数count 映射到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
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2021-12-09
        • 1970-01-01
        • 2023-02-08
        • 1970-01-01
        • 2020-09-28
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多