我已经搜索了这个答案,但找不到有用的东西。我想对一列keyword_visibility
求和,并按三列分组 category
、trend_month
trend_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'
任何帮助都非常感谢
这是因为您正在对值进行分组。 您正在尝试将分组依据和求和的结果插入到数据框的正常索引中。这意味着您正在尝试在新列中插入一组较小的值。
检查此链接:https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.groupby.html
如果要将结果插入到数据帧中,可以找到相应的值并使用 df.loc 插入结果
如果我正确理解了这个问题,您想使用转换。以下示例按两列分组,但应该清楚如何扩展到三列:
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