【问题标题】:How can I groupby in pandas and then sum values? [duplicate]我如何在熊猫中分组然后对值求和? [复制]
【发布时间】:2019-03-15 01:43:49
【问题描述】:

我遇到了下一个问题:我在 pandas 中有一个数据框,其属性为“features”,另一个属性为“VOTES”。 'VOTES' 是数字,'features' 是在数据框中重复的字符串。我想根据特征进行分组并对VOTES的值求和,以获得下一个结果:

最初的数据框:

+----------+---------+
| features | VOTES   |
+----------+---------+
| A        | 4       |
+----------+---------+
| V        | 3       |
+----------+---------+
| A        | 2       |
+----------+---------+
| C        | 9       |
+----------+---------+

我执行了以下操作,但在 VOTES 列上得到了 NaN 值。

dataframe_clusters['VOTES'] = dataframe_clusters.groupby('features')['VOTES'].sum()

我想得到下一个结果:

+----------+---------+
| features | VOTES   |
+----------+---------+
| A        | 6       |
+----------+---------+
| V        | 3       |
+----------+---------+
| C        | 9       |
+----------+---------+

【问题讨论】:

    标签: python pandas dataframe group-by sum


    【解决方案1】:

    您可以添加reset_index或参数as_index=False,也可以不排序features的值添加参数sort=False

    df = dataframe_clusters.groupby('features', sort=False)['VOTES'].sum().reset_index()
    
    df = dataframe_clusters.groupby('features', as_index=False, sort=False)['VOTES'].sum()
    

    print (df)
      features  VOTES
    0        A      6
    1        V      3
    2        C      9
    

    如果想分配给新列,可以使用GroupBy.transform 返回与原始DataFrame 大小相同的聚合值Series

    dataframe_clusters['VOTES'] = dataframe_clusters.groupby('features')['VOTES'].transform('sum')
    print (dataframe_clusters)
    
      features  VOTES
    0        A      6
    1        V      3
    2        A      6
    3        C      9
    

    【讨论】:

      【解决方案2】:

      你可以这样做:

      dataframe_clusters.groupby('features').sum().reset_index()
      

      输出:

        features  VOTES
      0        A      6
      1        C      9
      2        V      3
      

      【讨论】:

        【解决方案3】:

        从您的问题中并不清楚您到底需要什么。您正在进行的分组是可以的,但由于某种原因,您为其分配了同一数据帧的列。我猜你最终需要加入。检查这个:

        import pandas as pd
        df = pd.DataFrame(data={'features':['A','V','A','C'], 'VOTES':[4,3,2,9]})
        totals = df.groupby('features').sum()
        print(df)
        print(totals)
        joined = df.join(totals, on='features', rsuffix='_total')
        print(joined)
        

        它会给你这个:

           VOTES features
        0      4        A
        1      3        V
        2      2        A
        3      9        C
                  VOTES
        features       
        A             6
        C             9
        V             3
           VOTES features  VOTES_total
        0      4        A            6
        1      3        V            3
        2      2        A            6
        3      9        C            9
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-10-09
          • 2021-08-07
          • 2016-02-20
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多