簡體   English   中英

如何在Pandas DataFrame where子句中使用特定列的值?

[英]How do I use a specific column's value in a Pandas DataFrame where clause?

當特定列也符合單獨的條件時,我正在嘗試選擇滿足特定條件的pandas DataFrame中的所有單元格。

給定以下DataFrame:

      A    B    C    D
1/1   0    1    0    1
1/2   2    1    1    1
1/3   3    0    1    0 
1/4   1    0    1    2
1/5   1    0    1    1
1/6   2    0    2    1
1/7   3    5    2    3

我想以某種方式選擇列大於其先前值的數據,當D也> 1.我當前嘗試使用的語法是:

matches = df[(df > df.shift(1)) & (df.D > 1)]

但是,當我這樣做時,我收到以下錯誤:

TypeError:無法使用塊值操作[array([nan,nan,nan,nan],dtype = object)] [操作數無法與形狀一起廣播(2016)(4)]

注意:錯誤是直接復制並從我的實際代碼中過去,因此錯誤中的描述和形狀不會直接與我的示例DataFrame相關聯。

我知道df.D > 1導致了問題,並且直接將列與D進行比較是有效的(例如df > df.D )。 在嘗試將D與值1進行比較時,我的語法有什么問題,我怎么能做到這一點?

應該直接工作,但熊貓沒有廣播和運營商(將在0.14發生)。 這是一個解決方法。

In [74]: df
Out[74]: 
     A  B  C  D
1/1  0  1  0  1
1/2  2  1  1  1
1/3  3  0  1  0
1/4  1  0  1  2
1/5  1  0  1  1
1/6  2  0  2  1
1/7  3  5  2  3

這是一個where操作,基本上把np.nan放在條件為False的地方

In [78]: x = df[df>df.shift(1)]

In [79]: x
Out[79]: 
      A   B   C   D
1/1 NaN NaN NaN NaN
1/2   2 NaN   1 NaN
1/3   3 NaN NaN NaN
1/4 NaN NaN NaN   2
1/5 NaN NaN NaN NaN
1/6   2 NaN   2 NaN
1/7   3   5 NaN   3

按第二個條件選擇

In [80]: x[df.D>1]
Out[80]: 
      A   B   C  D
1/4 NaN NaN NaN  2
1/7   3   5 NaN  3

我認為問題實際上是來自移位操作的布爾數組是其他條件的一個短。 嘗試在索引零處向第一個條件添加false,然后您應該能夠組合這兩個條件。

我問題確實是第二個條件你可以發布結果

DF.dtypes

考慮到nan數組錯誤,它看起來不是int類型

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM