gpt4 book ai didi

Python Pandas : float values break down when df. 列 = df.columns.droplevel()

转载 作者:太空宇宙 更新时间:2023-11-03 21:20:14 24 4
gpt4 key购买 nike

我有一个包含交易的数据框。我想从这个 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
  • 如何去掉多级索引以便 float 数字不变?或
  • 如何聚合初始数据帧而不生成多索引?

最佳答案

没有改变值,只是没有显示,因为第一个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 的另一个解决方案是 mapjoin:

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

关于Python Pandas : float values break down when df. 列 = df.columns.droplevel(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54343618/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com