- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个包含交易的数据框。我想从这个 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
最佳答案
没有改变值,只是没有显示,因为第一个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
的另一个解决方案是 map
和 join
:
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/
是否有 pandas.DataFrame.droplevel 的相反功能,我可以使用级别名称或索引保留多级索引/列的某些级别? 例子: df = pd.DataFrame([ [1,
以下查询的屏幕截图: 有没有一种方法可以轻松地删除上层列索引,并有一个带有标签的单一级别,例如 points_prev_amax、points_prev_amin、gf_prev_amax、gf_pr
当我尝试从多索引 Pandas 数据帧中删除一个级别时,我收到一条奇怪的(据我所知)消息。 对于可重现的示例: toy.to_json() '{"["ISRG","EPS_diluted"]":{"2
我试图在第 1 列分组的第 2 列中找到前 2 个值。 这是数据框: # groupby id and take only top 2 values. df = pd.DataFrame({'id':
我有一个包含交易的数据框。我想从这个 OHLCV 中获得。 当我为此聚合时,我得到一个多索引数据帧。当我通过列的分配从多索引降低级别时,浮点尾部会出现额外的字符。 import pandas as p
我是一名优秀的程序员,十分优秀!