第一次发帖,新手到python。
我有一个由 3 列组成的数据框:['ID', 'date', 'profit_forecast']
'ID'
: 是产品 ID
'date'
: 开始日期
'profit_forecast'
:包含 367 个项目的列表,每个项目是 date+n 的利润预测
我希望创建一个新的数据框,该数据框将profit_forecast中的每个项目映射到ID和相应的日期+ n,以表示其在列表中的位置。
不知道如何开始。
提前感谢!
如果我理解正确,以下示例数据抓住了您问题的本质:
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]
一种解决方案是确保您已升级到 pandas 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 的日期。如果"date + 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