Pandas Dataframe,将多个列分组的单个值求和

时间:2019-07-25 11:09:50

标签: python-3.x pandas dataframe pandas-groupby

我已经搜索了这个答案,但是找不到可以解决的问题。我想对keyword_visibility列求和并将其按三列categorytrend_monthtrend_year分组。

结果将在同一数据帧中,并称为sum_keyword_visibility_by_category

我尝试过的包括:

df_market_share['sum_keyword_visibility_by_category'] = df_market_share.groupby(['category', 'trend_month', 'trend_year'])['keyword_visibility'].sum()

df_market_share['sum_keyword_visibility_by_category'] = df_market_share["keyword_visibility"].groupby(df_market_share["category"], ["trend_month" ]).transform("sum")

我第一次尝试得到的错误是TypeError: incompatible index of inserted column with frame index,第二次尝试得到的TypeError: unhashable type: 'list',非常感谢您的帮助

2 个答案:

答案 0 :(得分:0)

那是因为您正在对值进行分组。您正在尝试将groupby和求和的结果插入数据框的常规索引中。 这意味着您正在尝试在新列中插入较小的一组值。

检查此链接: https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html

如果要将结果插入到数据框中,则可以找到相应的值并使用df.loc插入结果

答案 1 :(得分:0)

如果我正确理解了该问题,则要使用transform。下面的示例按两列分组,但是应该清楚如何扩展到三列:

data = [     
['A', 'C', 1 ],          
['A', 'D', 2 ],        
['A', 'C', 2 ],        
['B', 'C', 3 ],       
['B', 'D', 4],
['B', 'C', 4]
]
df = pd.DataFrame(data, columns=['col1', 'col2',  'col_to_sum'])
df['summed_col']  = df.groupby(['col1', 'col2']).col_to_sum.transform('sum')
df

输出:

    col1 col2   col_to_sum  summed_col
0   A   C       1           3
1   A   D       2           2
2   A   C       2           3
3   B   C       3           7
4   B   D       4           4
5   B   C       4           7