এই সমাধানটি বাস্তবায়নের ক্ষেত্রে আরও হ্যাকিশ, তবে আমি ব্যবহারের দিক থেকে এটি আরও পরিষ্কার পরিচ্ছন্ন দেখতে পেয়েছি এবং অন্যরা প্রস্তাবিত তুলনায় এটি অবশ্যই বেশি সাধারণ।
https://github.com/toobaz/generic_utils/blob/master/generic_utils/pandas/where.py
আপনার পুরো রেপো ডাউনলোড করার দরকার নেই: ফাইলটি সংরক্ষণ এবং করছেন
from where import where as W
যথেষ্ট করা উচিত তারপরে আপনি এটি ব্যবহার করুন:
df = pd.DataFrame([[1, 2, True],
[3, 4, False],
[5, 7, True]],
index=range(3), columns=['a', 'b', 'c'])
# On specific column:
print(df.loc[W['a'] > 2])
print(df.loc[-W['a'] == W['b']])
print(df.loc[~W['c']])
# On entire - or subset of a - DataFrame:
print(df.loc[W.sum(axis=1) > 3])
print(df.loc[W[['a', 'b']].diff(axis=1)['b'] > 1])
সামান্য কম বোকা ব্যবহার উদাহরণ:
data = pd.read_csv('ugly_db.csv').loc[~(W == '$null$').any(axis=1)]
যাইহোক: আপনি কেবল বুলিয়ান কোল ব্যবহার করছেন এমন ক্ষেত্রেও,
df.loc[W['cond1']].loc[W['cond2']]
এর চেয়ে অনেক বেশি দক্ষ হতে পারে
df.loc[W['cond1'] & W['cond2']]
কারণ এটি cond2
কেবল যেখানে cond1
রয়েছে তা মূল্যায়ন করেTrue
।
অস্বীকৃতি: আমি আগে এই উত্তরটি অন্যত্র দিয়েছিলাম কারণ আমি এটি দেখিনি।
df.query
এবংpd.eval
এই ব্যবহারের ক্ষেত্রে ভাল মানায়। তথ্যের জন্যpd.eval()
ফাংশন, তাদের বৈশিষ্ট্য ও ব্যবহারের ক্ষেত্রে পরিবার, অনুগ্রহ করে পরিদর্শন pd.eval ব্যবহার পান্ডাস মধ্যে ডায়নামিক এক্সপ্রেশন মূল্যায়ন () ।