कार्यान्वयन के संदर्भ में यह समाधान अधिक हैकिश है, लेकिन मैं इसे उपयोग के मामले में बहुत अधिक स्वच्छ पाता हूं, और यह निश्चित रूप से प्रस्तावित अन्यों की तुलना में अधिक सामान्य है।
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 () का उपयोग करके पांडा में डायनेमिक एक्सप्रेशन मूल्यांकन का दौरा करें ।