Veri çerçevesindeki satırları iki sütundaki değerlere göre filtreliyorum.
Bazı nedenlerden dolayı OR operatörü, AND operatörünün davranmasını beklediğim gibi davranıyor ve bunun tersi de geçerli.
Test kodum:
import pandas as pd
df = pd.DataFrame({'a': range(5), 'b': range(5) })
# let's insert some -1 values
df['a'][1] = -1
df['b'][1] = -1
df['a'][3] = -1
df['b'][4] = -1
df1 = df[(df.a != -1) & (df.b != -1)]
df2 = df[(df.a != -1) | (df.b != -1)]
print pd.concat([df, df1, df2], axis=1,
keys = [ 'original df', 'using AND (&)', 'using OR (|)',])
Ve sonuç:
original df using AND (&) using OR (|)
a b a b a b
0 0 0 0 0 0 0
1 -1 -1 NaN NaN NaN NaN
2 2 2 2 2 2 2
3 -1 3 NaN NaN -1 3
4 4 -1 NaN NaN 4 -1
[5 rows x 6 columns]
Gördüğünüz gibi, AND
operatör en az bir değerin eşit olduğu her satırı bırakır -1
. Öte yandan, OR
operatör -1
onları düşürmek için her iki değerin de eşit olmasını gerektirir . Tam tersi bir sonuç beklerdim. Biri bu davranışı açıklayabilir mi lütfen?
Pandalar 0.13.1 kullanıyorum.
df.query
vepd.eval
bu kullanım durumu için uygun görünüyor.pd.eval()
İşlevler ailesi, özellikleri ve kullanım durumları hakkında bilgi için lütfen pd.eval () kullanarak pandalarda Dinamik İfade Değerlendirmesini ziyaret edin .