मुझे एक बहुत ही सरल समस्या है (मुझे लगता है) लेकिन इसे करने के लिए सही सिंटैक्स नहीं मिल रहा है:

निम्नलिखित डेटाफ्रेम:

   A   B  C
0  7  12  2
1  5   4  4
2  4   8  2
3  9   2  3

मुझे प्रत्येक पंक्ति के लिए अधिकतम (0; ए-बी + सी) के बराबर एक नया कॉलम डी बनाना होगा

मैंने एक np.maximum(df.A-df.B+df.C,0) की कोशिश की, लेकिन यह मेल नहीं खाता और मुझे प्रत्येक पंक्ति के लिए परिकलित कॉलम का अधिकतम मान देता है (उदाहरण में = 10)।

अंत में, मैं नीचे डीएफ प्राप्त करना चाहता हूं:

  A   B  C   D
0  7  12  2   0
1  5   4  4   5
2  4   8  2   0
3  9   2  3  10 

किसी भी मदद की सराहना की धन्यवाद

1
Bebio 20 नवम्बर 2020, 19:26

3 जवाब

सबसे बढ़िया उत्तर

आप np.where का उपयोग कर सकते हैं:

s = df["A"]-df["B"]+df["C"]
df["D"] = np.where(s>0, s, 0) #or s.where(s>0, 0)

print (df)

   A   B  C   D
0  7  12  2   0
1  5   4  4   5
2  4   8  2   0
3  9   2  3  10
0
Henry Yik 20 नवम्बर 2020, 19:36

हमें कोशिश करते हैं

df['D'] = df.eval('A-B+C').clip(lower=0)
Out[256]: 
0     0
1     5
2     0
3    10
dtype: int64
1
BENY 20 नवम्बर 2020, 19:39

इसे एक पंक्ति में करने के लिए आप apply का उपयोग प्रत्येक पंक्ति में अलग से अधिकतम फ़ंक्शन लागू करने के लिए कर सकते हैं।

In [19]: df['D'] = df.apply(lambda s: max(s['A'] - s['B'] + s['C'], 0), axis=1)                                                                                                                            

In [20]: df                                                                                                                                                                                                
Out[20]: 
   A  B  C   D
0  0  0  0   0
1  5  4  4   5
2  0  0  0   0
3  9  2  3  10
0
maow 20 नवम्बर 2020, 19:38