我有2个数据帧,按4个单独的键分组。我想将一个组的列的平均值分配给另一个组的列中的所有行值。据我了解,这是应该如何做的:
g_test.get_group((1, 5, 13, 8)).monthly_sales = \
g_train.get_group((1, 5, 13, 8)).monthly_sales.mean()
除此之外什么都不做。 g_test中标识的组的monthly_sales中的值保持不变。有人可以解释一下我做错了什么并建议替代方案吗?
这是g_train.get_group的前几行((1,5,13,8))
year month day store item units monthly_sales
1 5 5 13 8 4 466
1 5 6 13 8 12 475
1 5 0 13 8 22 469
1 5 5 13 8 26 469
1 5 6 13 8 39 480
这些是g_test.get_group的前几行((1,5,13,8))
year month day store item monthly_sales
1 5 1 13 8 0
1 5 2 13 8 0
1 5 3 13 8 0
1 5 4 13 8 0
1 5 5 13 8 0
只显示前几行,但是g_train((1,5,13,8))的平均值.minly_sales是450,我希望将其复制到g_test中的monthly_sales列。
编辑: 我现在明白了,下面的代码片段将起作用:
`df1.loc[(df1.year == 1)
& (df1.month == 5)
& (df1.store == 13)
& (df1.item == 8), 'monthly_sales'] = \
gb2.get_group((1, 5, 13, 8)).monthly_sales.mean()`
此操作非常适合复制平均值一次,但是我将数据框分成组的全部原因是为了避免这些逻辑检查,并针对不同的存储和项目编号多次执行此操作。还有什么我可以做的吗?
答案 0 :(得分:0)
您需要将结果分配回DataFrame,而不是groupby对象。这应该有效:
df1.loc[(df1.year == 1)
& (df1.month == 5)
& (df1.store == 13)
& (df1.item == 8), 'monthly_sales'] = \
gb2.get_group((1, 5, 13, 8)).monthly_sales.mean()
>>> gb1.get_group((1, 5, 13, 8))
year month day store item units monthly_sales
0 1 5 5 13 8 4 471.8
1 1 5 6 13 8 12 471.8
2 1 5 0 13 8 22 471.8
3 1 5 5 13 8 26 471.8
4 1 5 6 13 8 39 471.8
答案 1 :(得分:0)
其实我刚刚发现了一种更好的方法。 g_test是数据帧'test'的一部分,所以当我尝试下面的行时,它完美地运行了
Style