【发布时间】:2019-10-14 03:50:04
【问题描述】:
我正在使用一个加密货币时间序列数据集,该数据集包含所有不同的货币垂直堆叠。它有日期、货币和价格 3 列。每种货币的日期范围也不同。
即
>>> 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 替换。
即
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。
即
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 个条目?
我无法在这里找到相同类型的问题,并且在查看文档后我无法找到解决方案。我可能错过了一些东西,但希望我已经充分描述了这个问题。提前致谢。
【问题讨论】: