首页 > 解决方案 > 带有多个键错误和 TypeError 的 Pandas loc: 'Series' object is not callable with idxmax()

问题描述

我坚持使用 loc 在 pandas 中获取多个列。

 order_book = pd.DataFrame(client.OrderBook.OrderBook_getL2(  


            symbol='XBTUSD',
            depth = 0


        ).result()[0])
order_book.set_index(['price', 'size', 'side'], inplace= True) 
# setting multiple indexes to use loc with price size and side

所以在那之后我的数据框看起来像这样:

                                id  symbol
price  size  side                     
9636.0 64    Sell  15599036400  XBTUSD
9635.5 3024  Sell  15599036450  XBTUSD
9635.0 1304  Sell  15599036500  XBTUSD
9634.5 731   Sell  15599036550  XBTUSD
9634.0 534   Sell  15599036600  XBTUSD
9633.5 1406  Sell  15599036650  XBTUSD
9633.0 32590 Sell  15599036700  XBTUSD
9632.5 67039 Buy   15599036750  XBTUSD
9632.0 194   Buy   15599036800  XBTUSD
9631.5 125   Buy   15599036850  XBTUSD
9631.0 95    Buy   15599036900  XBTUSD
9630.5 95    Buy   15599036950  XBTUSD
9630.0 65    Buy   15599037000  XBTUSD
9629.5 333   Buy   15599037050  XBTUSD

我正在尝试这里这里的回答

df2 = order_book.loc[~(order_book["size"] > 50) & ~(order_book["side"] == "Buy")]

但我得到KeyError: 'size'错误inplace = Trueinplace = False我得到Empty DataFrame Columns: [id, price, side, size, symbol] Index: []


我的目标是从“购买”中获得“尺寸”的输出总和。

1) 我想用“买”得到第一个价格。(来自上面9632.5的例子)

2)在以这个价格获得所有尺寸后 - 10。(9632.5 - 2 = 9630.5)

3) 并得到这些大小的总和 (67039 + 194 + 125 + 95 + 95)


问题:

1)如何获得 loc 作品?

2)我应该使用order_book.side('side').idxmax()

为什么我会到达TypeError: 'Series' object is not callable那里

3)还有其他方法吗?


我检查了隐藏的空间。

order_book.columns
Index(['id', 'price', 'side', 'size', 'symbol'], dtype='object')

标签: pythonpandas

解决方案


loc 的问题就在这里。 df2 = order_book.loc[~(order_book["size"] > 50) & ~(order_book["side"] == "Buy")]

删除~inplace = False

所以 df2 = order_book.loc[(order_book["size"] > 100) & (order_book["side"] == "Buy")]

用于order_book.loc[order_book[order_book.side == 'Buy'].index[0],'price']第二个问题


推荐阅读