【问题标题】:Python: iteration across data framesPython:跨数据帧的迭代
【发布时间】: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


【解决方案1】:

感谢 davidbilla 的建议,我找到了解决方案。我创建了一个新的 df,我在其中附加了循环中的结果。

data = StringIO("""\Date, Product, Value1, Value2""")
dff = pd.read_table(data, sep=', ', parse_dates=[0])

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)
dff = dff.append(grp)

【讨论】:

    猜你喜欢
    • 2018-03-12
    • 1970-01-01
    • 1970-01-01
    • 2021-09-12
    • 1970-01-01
    • 2018-07-10
    • 2023-01-04
    • 1970-01-01
    • 2023-04-01
    相关资源
    最近更新 更多