Python:跨数据帧的迭代

Python:跨数据帧的迭代,python,pandas,loops,dataframe,iteration,Python,Pandas,Loops,Dataframe,Iteration,我是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 我创建了按产品分组的数据帧列表: gr

我是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


提前谢谢。

多亏了大卫比拉的建议,我才找到了解决方案。我创建了一个新的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)

多亏了大卫比拉的建议,我才找到了解决办法。我创建了一个新的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)

如果您提供了预期输出的示例,
grp
变量将使用
for
语句重置自身,这将非常有用。在
for
循环的第一次迭代中,
grp
将拥有产品A组,您将向其添加更多行。在第二个过程中,
grp
被分配到产品B组,这就是为什么您只得到最后一个
grp
。最好将它分配给一个新的df,然后再次分组。谢谢你的建议,我能够实现我想要的。非常感谢。如果您提供了预期输出的示例,
grp
变量将使用
for
语句重置自身,这将非常有用。在
for
循环的第一次迭代中,
grp
将拥有产品A组,您将向其添加更多行。在第二个过程中,
grp
被分配到产品B组,这就是为什么您只得到最后一个
grp
。最好将它分配给一个新的df,然后再次分组。谢谢你的建议,我能够实现我想要的。非常感谢。