python - 如何解压数据框中的列表
问题描述
第一次发帖,python新手。
我有一个由 3 列组成的数据框:['ID', 'date', 'profit_forecast']
'ID'
: 是产品编号
'date'
: 开始日期
'profit_forecast'
: 一个包含367个项目的列表,每个项目是date+n的盈利预测
我正在寻找创建一个新的数据框,将 profit_forecast 中的每个项目映射到 ID 和对应的 date+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 的日期。如果通过“日期+ 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
推荐阅读
- c# - wpf netframeworkcore 3.1 mvvm 可见性
- python - 尝试使用 ploty-dash 应用程序连接到 mysql db 时出现错误
- angular - Angular 和 RxJS - catchError() 不会捕获请求错误
- python-3.x - 通过迭代访问嵌入列表
- yarnpkg - 如何使用 yarn 安装最新版本的 jsPDF?
- javascript - 无法访问 redux 商店属性
- java - 模拟 QueryBuilder 时出现 NullPointerException
- python - 使用 BeautifulSoup4 抓取 div 类信息
- node.js - Npm 测试仅在目录名称匹配时失败
- c - 获取 uint8_t 指针的值