আমি দুটি কলামে মান দ্বারা একটি ডেটাফ্রেমে সারিগুলি ফিল্টার করছি am
কোনও কারণে ওআর অপারেটর এমন আচরণ করে যেমন আমি আশা করি ও অপারেটর আচরণ করবে এবং বিপরীত হবে।
আমার পরীক্ষার কোড:
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 (|)',])
এবং ফলাফল:
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]
আপনি দেখতে পাচ্ছেন, AND
অপারেটর প্রতি সারিতে ড্রপ করে যার মধ্যে কমপক্ষে একটি মান সমান হয় -1
। অন্যদিকে, OR
অপারেটরের উভয় মানগুলি -1
সেগুলি ফেলে দেওয়ার জন্য সমান হওয়া দরকার । আমি ঠিক বিপরীত ফলাফল আশা করব। দয়া করে কেউ কি এই আচরণটি ব্যাখ্যা করতে পারে?
আমি পান্ডা ব্যবহার করছি 0.13.1।
df.query
এবংpd.eval
এই ব্যবহারের ক্ষেত্রে ভাল মানায়। তথ্যের জন্যpd.eval()
ফাংশন, তাদের বৈশিষ্ট্য ও ব্যবহারের ক্ষেত্রে পরিবার, অনুগ্রহ করে পরিদর্শন pd.eval ব্যবহার পান্ডাস মধ্যে ডায়নামিক এক্সপ্রেশন মূল্যায়ন () ।