我有以下 Dataframe :
ID Code Color Value
-----------------------------------
0 111 AAA Blue 23
1 111 AAA Red 43
2 111 AAA Green 4
3 121 ABA Green 45
4 121 ABA Green 23
5 121 ABA Red 75
6 122 AAA Red 52
7 122 ACA Blue 24
8 122 ACA Blue 53
9 122 ACA Green 14
...
我想按列"ID"和"Code"对这个 Dataframe 进行分组,并对"Value"列中的值求和,同时从分组中排除"Color"列。或者换句话说,我想按所有非Value列进行分组,除了"Color"列,然后对"Value"列中的值求和。我使用python来完成这个任务。
我想做的是创建一个列表,其中包含所有不是"Color"和"Value"的列名,并创建这个"column_list",然后简单地运行:
df.groupby['column_list'].sum()
虽然这不起作用,但我应该如何扩展这段代码,以便能够按照预期正确地执行groupby?
编辑:
此代码适用于:
bins = df.groupby([df.columns[0],
df.columns[1],
df.columns[2]).count()
bins["Weight"] = bins / bins.groupby(df.columns[0]).sum()
bins.reset_index(inplace=True)
bins['Weight'] = bins['Weight'].round(4)
display(HTML(bins.to_html()))
无法正常工作的完整代码:
column_list = [c for c in df.columns if c not in ['Value']]
bins = df.groupby(column_list, as_index=False)['Value'].count()
bins["Weight"] = bins / bins.groupby(df.columns[0]).sum()
bins.reset_index(inplace=True)
bins['Weight'] = bins['Weight'].round(4)
display(HTML(bins.to_html()))
1条答案
按热度按时间esbemjvw1#
您可以将list传递给
groupby
,并为聚合sum
指定列:或者:
它处理的样本数据如下:
编辑:是的,还在工作:
原因是
sum
默认删除非数值列,如果未指定Value
,则会对所有列求和。因此,如果
Color
是数值,它也求和:编辑:如果
bins
中需要MultiIndex
,请删除as_index=False
和groupby
后的列:应改为: