我得到了这两个 Dataframe :
DF1:
A | B | C
2023-10-31 | foo | bar
2023-11-30 | foo | bar
2023-12-31 | foo | bar
...
DF2:
D | E | F
2023-10-31 | 23 | bar
2023-10-31 | 25 | bar
2023-10-31 | 34 | bar
...
我想对groupby()
列A
求和,然后对E
列求和,问题是两个 Dataframe 中的日期数量不同(df2
中少了一个)
我试过:
df1["D"] = df2.groupby(["D"]).agg({"E": sum}).values
这导致:
ValueError:值的长度与索引的长度不匹配
我唯一的其他想法是将iterrows()
与iloc
一起使用
2条答案
按热度按时间uemypmqf1#
这就是Pandas的索引。在Pandas中有两种(相关的)方法来分配列。你可以一个元素接一个元素地对齐行的长度,或者你可以对齐索引标签。考虑下面的数据框。
你可以通过分配一个列表来添加一列,但是只有当你有相同的长度时,这才有效。这似乎是你现在遇到的问题。
或者你也可以通过对齐索引来实现,这将只分配那些索引匹配的元素。看看临时数据框是如何不拉过索引为4和5的元素的:
在您的示例中,您尝试基于第一种方法赋值,如果长度不同,则该方法将失败。
您希望按日期对齐,这将要求您将
df1
中的索引设置为列A
。要按索引对齐,您还必须在两个数据框中具有 * 相同 * 的索引类型。然后,您可以直接附加groupby
创建的索引中的相应值。因此:9ceoxa922#
使用
map
对齐A上groupby操作的输出:输出:
如果输出的是DataFrame,则可以合并:
输出: