python - 如何将具有重复索引的堆叠列转换为具有熊猫的多个唯一列?
问题描述
我正在使用一个加密货币时间序列数据集,该数据集具有垂直堆叠的所有不同货币。它有日期、货币和价格 3 列。每种货币的日期范围也不同。
IE
>>> df
Currency Date Price
0 0x 2017-08-16 0.111725
1 0x 2017-08-17 0.211486
2 0x 2017-08-18 0.283789
3 0x 2017-08-19 0.511434
4 0x 2017-08-20 0.429522
... ... ... ...
657311 zurcoin 2018-02-04 0.003254
657312 zurcoin 2018-02-05 0.002774
657313 zurcoin 2018-02-06 0.001986
657314 zurcoin 2018-02-09 0.002684
657315 zurcoin 2018-02-10 0.002325
相反,我需要为每种货币的价格和日期设置一列,作为仅具有唯一日期的索引。会有很多空值我打算用 0 替换。
IE
date 0x_price 10mtoken_price 1337coin_price ...
2017-08-16 1 4 (NaN)->0 ...
2017-08-17 2 5 (NaN)->0 ...
2017-08-18 3 6 7 ...
... ... ... ... ...
我尝试使用 groupby 遍历数据框,如下所示:
df2 = pd.DataFrame()
df2["date"] = df["Date"].unique()
df2.set_index("date", inplace=True)
for currency, group in df.groupby("Currency"):
df2.loc[df2.index.isin(group.Date), f"{currency}_price"] = group["Price"]
这返回了所需的列名和形状,但数据框填充了 NaN。
IE
date 0x_price 10mtoken_price 1337coin_price ...
2017-08-16 NaN NaN NaN ...
2017-08-17 NaN NaN NaN ...
2017-08-18 NaN NaN NaN ...
... ... ... ... ...
我还尝试使用 df.join() 实现相同的目标,如下所示:
df2 = pd.DataFrame()
df2["date"] = df["Date"].unique()
df2.set_index("date", inplace=True)
for currency, group in df.groupby("Currency"):
df2 = df2.join(group.set_index("Date")[["Price"]].rename(columns={"Price": f"{currency}_price"}))
在冻结我的计算机之前,这并没有完成执行。也许它效率低下,我正在处理大约 650,000 个条目?
我在这里找不到相同类型的问题,并且在查看文档后我也无法找到解决方案。我可能错过了一些东西,但希望我已经充分描述了这个问题。提前致谢。
解决方案
熊猫pivot_table
可以在这里提供帮助。我会使用:
resul = df.pivot_table(index=['Date'], columns=['Currency'], values=['Price']).fillna(0)
使用您的示例数据,它给出:
Price
Currency 0x zurcoin
Date
2017-08-16 0.111725 0.000000
2017-08-17 0.211486 0.000000
2017-08-18 0.283789 0.000000
2017-08-19 0.511434 0.000000
2017-08-20 0.429522 0.000000
2018-02-04 0.000000 0.003254
2018-02-05 0.000000 0.002774
2018-02-06 0.000000 0.001986
2018-02-09 0.000000 0.002684
2018-02-10 0.000000 0.002325
推荐阅读
- kubernetes - 云平台如何保证服务不宕机
- bash - `inotifywait` 不会在带有 `-e delete_self` 的 bash 脚本中终止;但在交互式外壳中
- django - 如何使用 MySQL 数据库在 Django 中为非洲/卢萨卡设置时区
- optimization - 使用IBM CPLEX python API的分段函数,但问题无法解决
- css - 应用于地图框弹出窗口的 CSS 未加载
- sql - 修改查询(显示每个项目的最新行)
- android - Flutter / Android(Kotlin) - 后台服务
- mongodb - 使用多个字段的mongodb查找不起作用
- dart - 了解 Dart 中的括号(颤振)
- python - KNN分类器的测量精度