আমি দুটি কলামে মান দ্বারা একটি ডেটাফ্রেমে সারিগুলি ফিল্টার করছি 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 ব্যবহার পান্ডাস মধ্যে ডায়নামিক এক্সপ্রেশন মূল্যায়ন () ।