【发布时间】:2020-10-11 12:21:00
【问题描述】:
我是 python 新手,我的代码需要一点帮助才能实现跨具有相同列的不同数据帧的迭代。
我的数据框如下所示:
Date, Product, Value1, Value2
13-3-2020, A, 10, 15
13-4-2020, A, 11, 26
13-5-2020, A, 14, 14
2-2-2018, B, 10, 15
18-2-2018, B, 11, 26
5-4-2018, B, 14, 14
5-5-2018, B, 12, 12
我创建了一个按产品分组的数据框列表:
groups = list(df.groupby('Product'))
然后我想在第一个日期和最后一个日期之间的每个月的第一天填充每个数据框。不幸的是,我只是将最后一个产品作为输出,作为单独的数据框。
我试过这段代码:
for g, grp in groups:
month_grp = pd.Series(pd.date_range(start=min(grp['Date']), end=max(grp['Date']), freq='MS'), name="Date").to_frame()
grp = grp.append(month_grp, ignore_index=True)
grp = grp.sort_values(by='Date').reset_index(drop=True)
print(grp)
Date Product Value1 Value2
0 2018-02-02 B 10.0 15.0
1 2018-02-18 B 11.0 26.0
2 2018-03-01 NaN NaN NaN
3 2018-04-01 NaN NaN NaN
4 2018-05-01 NaN NaN NaN
5 2018-05-04 B 14.0 14.0
6 2018-05-05 B 12.0 12.0
我正在寻找的解决方案是对每个产品、数据框进行迭代。理想情况下,将此结果保存在数据帧的组列表中,因为之后我将执行更多计算。
任何帮助都将不胜感激。即使这是一种关于如何按组处理此数据帧的新方法,也不是低谷pandas。
提前谢谢你。
【问题讨论】:
-
如果您提供预期输出的样本会很有帮助
-
grp变量使用for语句自行重置。在for循环的第一次迭代中,grp将拥有产品 A 组,并且您将向其附加更多行。在第二遍中,grp被分配到产品 B 组,这就是为什么您只获得最后一个grp。最好将其分配给一个新的df,然后再将它们分组。 -
感谢您的建议,我能够实现我想要的。谢谢!
标签: python pandas loops dataframe iteration