我有一份交易数据。我想从这辆OHLCV上得到。
当我对此进行聚合时,我会得到一个多索引的数据。当我通过赋值列从多个索引中删除级别时,浮点尾上会出现额外的字符。
import pandas as pd
trades = pd.DataFrame(
data={
'price': np.random.uniform(1000, 1200, 48),
'volume': np.random.uniform(50, 100, 48)
},
index=pd.date_range(start='2019-01-01 00:00', end='2019-01-02 23:00', freq='H')
)
ohlcv = trades.resample('D').agg({'price': 'ohlc', 'volume': 'sum'})
# ohlcv['volume'].iloc[0] == 1744.871219
ohlcv.columns = ohlcv.columns.droplevel()
# ohlcv['volume'].iloc[0] == 1744.8712193218892
发布于 2019-01-24 01:50:38
没有更改的值,只是没有显示,因为第一次iloc
返回一个值Series
np.random.seed(456)
trades = pd.DataFrame(
data={
'price': np.random.uniform(1000, 1200, 48),
'volume': np.random.uniform(50, 100, 48)
},
index=pd.date_range(start='2019-01-01 00:00', end='2019-01-02 23:00', freq='H') )
ohlcv = trades.resample('D').agg({'price': 'ohlc', 'volume': 'sum'})
print (ohlcv)
price volume
open high low close volume
2019-01-01 1049.751182 1177.140381 1001.636683 1001.636683 1777.630832
2019-01-02 1072.013700 1194.631131 1008.525926 1130.678109 1804.651706
print (ohlcv['volume'].iloc[0])
volume 1777.630832
Name: 2019-01-01 00:00:00, dtype: float64
print (ohlcv['volume'].iloc[0].tolist())
[1777.630832239808]
ohlcv.columns = ohlcv.columns.droplevel()
print (ohlcv['volume'].iloc[0])
1777.630832239808
另一种删除MultiIndex
的解决方案是带join
的map
ohlcv.columns = ohlcv.columns.map('_'.join)
print (ohlcv)
price_open price_high price_low price_close volume_volume
2019-01-01 1049.751182 1177.140381 1001.636683 1001.636683 1777.630832
2019-01-02 1072.013700 1194.631131 1008.525926 1130.678109 1804.651706
使用MultiIndex.droplevel
的解决方案也是可以使用的,但是要小心避免返回重复的列名:
ohlcv = trades.resample('D').agg({'price': 'ohlc', 'volume': 'ohlc'})
print (ohlcv)
price volume \
open high low close open
2019-01-01 1049.751182 1177.140381 1001.636683 1001.636683 68.335978
2019-01-02 1072.013700 1194.631131 1008.525926 1130.678109 85.631147
high low close
2019-01-01 98.772905 50.545352 70.416061
2019-01-02 99.011524 51.194741 57.057429
ohlcv.columns = ohlcv.columns.droplevel()
print (ohlcv)
open high low close open \
2019-01-01 1049.751182 1177.140381 1001.636683 1001.636683 68.335978
2019-01-02 1072.013700 1194.631131 1008.525926 1130.678109 85.631147
high low close
2019-01-01 98.772905 50.545352 70.416061
2019-01-02 99.011524 51.194741 57.057429
print (ohlcv['open'])
open open
2019-01-01 1049.751182 68.335978
2019-01-02 1072.013700 85.631147
https://stackoverflow.com/questions/54343618
复制相似问题