【问题标题】:Sum all possible combinations in pandas dataframe总结熊猫数据框中所有可能的组合
【发布时间】:2021-03-25 07:48:56
【问题描述】:

我有一个包含几列的 df,但其中两列看起来像:

number output colour
1         1    green
2         1    red
3         1    orange
4         0    green
5         1    green

我需要找到所有可能的组合和出现的次数,所以我期望类似

1green    2
1red      1
1orange   1
0green    1

使用这个python: Combination of two Columns 我找到了所有可能的组合,但我不知道如何求和。或者有什么办法可以一步完成吗?

谢谢

【问题讨论】:

    标签: python pandas pandas-groupby


    【解决方案1】:

    试试:

    pd.value_counts([*zip(df.output, df.colour)])
    
    (1, green)     2
    (0, green)     1
    (1, orange)    1
    (1, red)       1
    dtype: int64
    

    【讨论】:

      【解决方案2】:

      Series.value_counts 用于连接列:

      s = (df.output.astype(str) + df.colour).value_counts()
      print (s)
      1green     2
      1red       1
      0green     1
      1orange    1
      dtype: int64
      

      或者可以使用GroupBy.size:

      s = df.groupby(['output','colour']).size()
      print (s)
      output  colour
      0       green     1
      1       green     2
              orange    1
              red       1
      dtype: int64
      

      DateFrame.value_counts

      s = df[['output','colour']].value_counts()
      print (s)
      output  colour
      1       green     2
      0       green     1
      1       orange    1
              red       1
      dtype: int64
      

      最后使用 DataFrame:

      s = s.reset_index(name='count')
      

      编辑:

      对于所有组合使用:

      s = df.groupby(['output','colour']).size().unstack(fill_value=0).stack()
      print (s)
      output  colour
      0       green     1
              orange    0
              red       0
      1       green     2
              orange    1
              red       1
      dtype: int64
      
      s = df[['output','colour']].value_counts().unstack(fill_value=0).stack()
      print (s)
      output  colour
      0       green     1
              orange    0
              red       0
      1       green     2
              orange    1
              red       1
      dtype: int64
      

      【讨论】:

      • 哇! df[['output','colour']].value_counts() 那是新的。他们什么时候添加了这个功能?
      • @piRSquared - 是的,完全正确。
      • @piRSquared 我想 v1.1+ 我昨天也发现了这个 :)
      • 谢谢你,这些解决方案是如此优雅!
      • @ZuzanaTelefony - 欢迎您!顺便说一句,您的昵称似乎是捷克语或斯洛伐克语,Telefony 表示 phones ;)
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-10-03
      • 2022-06-23
      • 1970-01-01
      • 2021-01-22
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多