【问题标题】:Counting comma separated string in dataframe in a new column在新列中计算数据框中的逗号分隔字符串
【发布时间】:2021-05-20 03:03:30
【问题描述】:

我有以下df:

df = pd.DataFrame({'Name': ['John', 'Sara', 'Paul', 'Guest'], 'Interaction': ['share,like,share,like,like,like', 'love,like,share,like,love,like', 'share,like,share,like,like,like,share,like,share,like,like,hug','share,like,care,like,like,like']})

Name    Interaction
0   John    share,like,share,like,like,like
1   Sara    love,like,share,like,love,like
2   Paul    share,like,share,like,like,like,share,like,sha...
3   Guest   share,like,care,like,like,like

我想创建第三列计算单个交互的数量为int

我做了什么:

df['likes'] = df[df['Interaction'] == 'like'].groupby('Name')['Interaction'].transform(lambda x: x[x.str.contains('like')].count())

我为分享、关心等做了同样的事情 但它不起作用!

Name    Interaction                                           likes     shares
0   John    share,like,share,like,like,like                     NaN     NaN
1   Sara    love,like,share,like,love,like                      NaN     NaN
2   Paul    share,like,share,like,like,like,share,like,sha...   NaN     NaN
3   Guest   share,like,care,like,like,like                      NaN     NaN

如何将每次互动计为int,然后在最后一列中找到每行的总数?

【问题讨论】:

    标签: python python-3.x pandas dataframe


    【解决方案1】:

    首先您需要str.split 逗号上的列,展开结果以创建一个数据框,stack 获取一个系列并使用 str.get_dummies 将为每个不同的单词创建一个列,并为每个不同的单词添加 1系列中的对应值。最后sum on level=0 回到原来的形状。 join结果到原始数据框

    df = df.join( df['Interaction'].str.split(',', expand=True)
                    .stack()
                    .str.get_dummies()
                    .sum(level=0)
                )
    print(df)
        Name                                        Interaction  care  hug  like  \
    0   John                    share,like,share,like,like,like     0    0     4   
    1   Sara                     love,like,share,like,love,like     0    0     3   
    2   Paul  share,like,share,like,like,like,share,like,sha...     0    1     7   
    3  Guest                     share,like,care,like,like,like     1    0     4   
    
       love  share  
    0     0      2  
    1     2      1  
    2     0      4  
    3     0      1  
    

    【讨论】:

      【解决方案2】:

      你可以通过,拆分字符串,分解它和value_counts

      df.join(df['Interaction'].str.split(',')
                .explode()
                .groupby(level=0).value_counts()
                .unstack(fill_value=0))
      

      输出:

          Name                                        Interaction  care  hug  like  love  share
      0   John                    share,like,share,like,like,like     0    0     4     0      2
      1   Sara                     love,like,share,like,love,like     0    0     3     2      1
      2   Paul  share,like,share,like,like,like,share,like,sha...     0    1     7     0      4
      3  Guest                     share,like,care,like,like,like     1    0     4     0      1
      

      【讨论】:

        【解决方案3】:

        让我们做pd.crosstab

        s = df.Interaction.str.split(',').explode()
        df = df.join(pd.crosstab(s.index,s))
        

        【讨论】:

          猜你喜欢
          • 2019-12-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-02-17
          相关资源
          最近更新 更多