为数据帧中的每一行返回多行

2024-04-26 09:30:03 发布

您现在位置:Python中文网/ 问答频道 /正文

这是我想要执行的任务,我有大约7000个网站和50个类别的列表,每个类别每个月都有一个销售计划。我想将这个月计划转换为每日计划,并将其与实际值进行比较,并创建一个power BI visual,为此我需要将计划数据转换为每日计划

以下是示例:

df = pd.DataFrame({'ID':[1,2],
                    'Month':[1,1],
                   'Plan':[310,620],
                'Month_start_date': ['2020-01-01','2020-01-01']})
print(df)

df['Month_start_date'] = (pd.to_datetime(df['Month_start_date'], format='%Y/%m/%d')
                     .dt.to_period('m').dt.to_timestamp())

df = df.set_index('Month_start_date')

现在,我想对每行应用的函数返回更多的行数,下面是一个示例:

start = '2020-01-01'
end = '2020-01-05'
dates = pd.date_range(start, end, freq='D')
dates

df= df.reindex(dates,method = 'ffill')

这将返回一个错误,因为索引具有重复的值

ValueError: cannot reindex a non-unique index with a method or limit

这是我想要的输出

            ID  Month  Plan
2020-01-01   1      1   310
2020-01-02   1      1   310
2020-01-03   1      1   310
2020-01-04   1      1   310
2020-01-05   1      1   310
2020-01-01   2      1   620
2020-01-02   2      1   620
2020-01-03   2      1   620
2020-01-04   2      1   620
2020-01-05   2      1   620

因为我必须为其运行的组合数量实际上大约为800K,所以在循环上运行它(使用.iterrows())需要花费很长时间才能完成,而且似乎效率很低

还尝试使用.groupby.apply()函数。但是它不允许我为每一行返回一个数据帧(表df)

需要改进这一进程的建议


Tags: to数据id示例dfdateindexdt
1条回答
网友
1楼 · 发布于 2024-04-26 09:30:03

sort_values()函数有望实现您想要的功能:

df.sort_values(by=df.index, inplace =True)

或者,如果您的日期有一个列名,您只需将其更改为df的列名,您甚至可以将其与groupby配对,以便仅为某些已排序的组创建数据帧,因为您的数据集非常大。我希望这有点帮助

相关问题 更多 >