के सबसेट के लिए शर्त के आधार पर मूल्यों को सेट करने का उचित तरीका मुझे यकीन नहीं है कि बिना किसी असाइनमेंट के यह कैसे किया जाए (जो शायद किसी भी तरह से काम नहीं करेगा क्योंकि मैं एक प्रतिलिपि स्थापित कर रहा हूं)।पांडा: मल्टीइंडेक्स डेटाफ्रेम
मैं एक मल्टीइंडेक्स पांडा डेटाफ्रेम का सबसेट नहीं लेना चाहता, शून्य से कम मानों के लिए परीक्षण करता हूं और उन्हें शून्य पर सेट करता हूं।
उदाहरण के लिए:
df = pd.DataFrame({('A','a'): [-1,-1,0,10,12],
('A','b'): [0,1,2,3,-1],
('B','a'): [-20,-10,0,10,20],
('B','b'): [-200,-100,0,100,200]})
df[df['A']<0] = 0.0
In [37]:
df
Out[37]:
A B
a b a b
0 -1 0 -20 -200
1 -1 1 -10 -100
2 0 2 0 0
3 10 3 10 100
4 12 -1 20 200
से पता चलता है कि यह कौन सा स्थिति के आधार पर स्थापित करने के लिए सक्षम नहीं था देता है। वैकल्पिक रूप से अगर मैं एक श्रृंखलित काम किया:
df.loc[:,'A'][df['A']<0] = 0.0
यह वही परिणाम देता है (और प्रति चेतावनी के साथ की स्थापना)
मैं कर सकता है स्थिति के आधार पर प्रत्येक स्तंभ के माध्यम से लूप प्रथम स्तर से एक है कि है कि मैं हैं:
for one,two in df.columns.values:
if one == 'A':
df.loc[df[(one,two)]<0, (one,two)] = 0.0
जो वांछित परिणाम देता है:
In [64]:
df
Out[64]:
A B
a b a b
0 0 0 -20 -200
1 0 1 -10 -100
2 0 2 0 0
3 10 3 10 100
4 12 0 20 200
लेकिन किसी भी तरह से मुझे लगता है कि कॉलम के माध्यम से लूपिंग करने से ऐसा करने का एक बेहतर तरीका है। पांडा में ऐसा करने का सबसे अच्छा तरीका क्या है?
आह ठीक है धन्यवाद! मुखौटा बनाने के लिए स्लाइसर्स का उपयोग करना वास्तव में उपयोगी लगता है (इसे मेरे अधिक कोड में उपयोग करना पड़ सकता है)। दूसरा उदाहरण मेरी विशिष्ट समस्या को हल करता है। मुझे 'डीएफ ['ए']' और 'डीएफ [['ए']]' के बीच के अंतर के बारे में पता नहीं था – pbreach