首次发布,是python的新手。
我有一个由3列组成的数据框:['ID', 'date', 'profit_forecast']
'ID'
:是产品ID
'date'
:开始日期
'profit_forecast'
:包含367个项目的列表,每个项目都是date + n的利润预测
我正在寻找一个新的数据框,该框将profit_forecast中的每个项目映射到ID以及列表中其位置的对应date + n。
不确定如何开始。
谢谢!
答案 0 :(得分:0)
如果我对您的理解正确,以下示例数据将说明您问题的实质:
df = pd.DataFrame({'ID': [1, 2, 3],
'date': pd.date_range('2019-01-01', freq='YS', periods=3),
'profit_forecast': [[1, 2, 3], [4, 5], [6, 7, 8, 9]]})
df
ID date profit_forecast
0 1 2019-01-01 [1, 2, 3]
1 2 2020-01-01 [4, 5]
2 3 2021-01-01 [6, 7, 8, 9]
一种解决方案是确保已升级到0.25熊猫,然后升级到explode
profit_forecast
列:
res = df.explode('profit_forecast')
res
ID date profit_forecast
0 1 2019-01-01 1
0 1 2019-01-01 2
0 1 2019-01-01 3
1 2 2020-01-01 4
1 2 2020-01-01 5
2 3 2021-01-01 6
2 3 2021-01-01 7
2 3 2021-01-01 8
2 3 2021-01-01 9
在这一点上,关于如何增加每个ID的日期的问题还不够清楚。如果按“日期+ n”表示要在每个ID的每个连续日期中增加一天,则应执行以下操作:
res['date'] = res['date'] + pd.to_timedelta(res.groupby('ID').cumcount(), 'D')
res
ID date profit_forecast
0 1 2019-01-01 1
0 1 2019-01-02 2
0 1 2019-01-03 3
1 2 2020-01-01 4
1 2 2020-01-02 5
2 3 2021-01-01 6
2 3 2021-01-02 7
2 3 2021-01-03 8
2 3 2021-01-04 9