为什么groupby和rolling不能一起使用?

9

我有一个从 coinmarketcap 网站抓取的 df。我试图计算 close_price 列的波动率指标,但当我使用 groupby 时,出现了错误消息:

final_coin_data['vol'] = final_coin_data.groupby('coin_name')['close_price'].rolling(window=30).std()
TypeError: incompatible index of inserted column with frame index

数据框结构('Unnamed:0' 是在我加载 CSV 文件之后出现的):

    Unnamed: 0  close_price coin_name   date            high_price  low_price    market_cap         open_price  volume
0   1           9578.63     Bitcoin     Mar 11, 2018    9711.89     8607.12      149,716,000,000    8852.78     6,296,370,000
1   2           8866.00     Bitcoin     Mar 10, 2018    9531.32     8828.47      158,119,000,000    9350.59     5,386,320,000
2   3           9337.55     Bitcoin     Mar 09, 2018    9466.35     8513.03      159,185,000,000    9414.69     8,704,190,000
3   1           9578.63     Monero      Mar 11, 2018    9711.89     8607.12      149,716,000,000    8852.78     6,296,370,000
4   2           8866.00     Monero      Mar 10, 2018    9531.32     8828.47      158,119,000,000    9350.59     5,386,320,000
5   3           9337.55     Monero      Mar 09, 2018    9466.35     8513.03      159,185,000,000    9414.69     8,704,190,000

(忽略不正确的价格,这是df的基础)

当使用以下代码时:

final_coin_data1['vol'] = final_coin_data.groupby('coin_name')['close_price'].rolling(window=30).std().reset_index(0,drop=True)

我遇到了MemoryError错误。我以为我正确使用了groupby函数,但如果我去掉final_coin_data1['vol'] =,那么得到的序列看起来是正确的,但它不允许我插入到数据框中。
当我刚开始这个项目时,只有一种货币,使用以下代码计算波动性没有问题。
 final_coin_data1['vol'] = final_coin_data['close_price'].rolling(window=30).std()

1
在加载数据框时,使用 index_col=[0] 来防止加载 Unnamed: 0。 - cs95
1个回答

12

当我运行这个时,

final_coin_data['close_price'].rolling(window=30).std()

生成索引列和结果列。当我尝试将其作为新列合并回原始数据框 final_coin_data1['vol'] 时,出现错误 TypeError: incompatible index of inserted column with frame index。为了修正这个问题,我使用了reset_index(drop=True),这样就消除了索引,使得结果可以与final_coin_data1['vol']连接。

最终的可运行代码如下:

final_coin_data1['vol'] = final_coin_data.groupby('coin_name')['close_price'].rolling(window=30).std().reset_index(0,drop=True)

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接