如何解压缩数据帧中的列表



第一次发帖,新手到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,然后explodeprofit_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

最新更新