मैं क्या करना चाहता हूं: एक लूप के लिए बनाएं जो डेटा के माध्यम से पुनरावृत्त हो, यदि संभावना एक समान संख्या में समाप्त होती है, तो मैं इसमें 0.1 जोड़ना चाहता हूं, यदि रंग लाल है तो मैं उस आइटम की लागत को 10% तक बढ़ाना चाहता हूं .

मेरे सिंटैक्स में कुछ गड़बड़ है। मैं यह नहीं समझ सकता कि मैं जो चाहता हूं उसे सही तरीके से कैसे करूं। मुझे यह त्रुटि मिलती रहती है: ValueError: The truth value of a DataFrame is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all()। साथ ही, क्या मैं% 2 का उपयोग कर सकता हूँ यदि मान एक फ्लोट है?

कृपया मदद करे। शुक्रिया

यहाँ मेरा कोड है:

for i in range(df.shape[0]):
    if df['Probability'] %2 == 0:
        df['Probability'] += 0.1
    if df['Color'] == 'Red':
        df['Cost'] += (df['Cost']*.01)

यहां वह डेटासेट है जिसके साथ मैं काम कर रहा हूं: चार कॉलम (रंग, संभावना, फूल और लागत) और 20 पंक्तियाँ हैं

     Color  Probability  Flower     Cost
0      Red          2.6       0   378.86
1    Green          1.8       0   329.63
2     Blue          6.1       1   565.46
3    Brown          1.8       1   162.45
4     Blue          5.8       0   490.28
5    Green          6.2       0   516.94
6      Red          4.1       0   441.75
7    Brown          6.5       0   737.20
8     Blue          6.7       1   790.60
9    Green          5.2       0   446.04
10     Red          7.8       1   874.87
11  Yellow          4.1       1   469.51
12   Green          7.0       1   718.52
13     Red          0.5       0   121.99
14  Yellow          9.6       0  1097.16
15   Brown          1.5       0    54.83
16    Blue          6.2       1   610.69
17   Green          8.9       1   825.52
18     Red          2.3       0   346.86
19  Yellow          9.1       1   991.26
0
Tiana Chargin 5 सितंबर 2021, 04:04

2 जवाब

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

आपके कोड के साथ समस्या यह है कि df['Probability'] %2 == 0 सही/गलत मान की एक बूलियन श्रृंखला बनाता है, इसलिए आप इसके साथ if का उपयोग नहीं कर सकते क्योंकि यह एक मान नहीं है, बल्कि मानों की एक श्रृंखला है, और आपको इसकी आवश्यकता है एक समय में एक मान की जाँच करें।

एक अन्य समस्या यह है कि आप df.shape[0] की सीमा में पुनरावृति कर रहे हैं जो मूल रूप से पंक्तियों की संख्या है, लेकिन आप वास्तव में परिणाम निर्दिष्ट करते समय i के मान का उपयोग नहीं कर रहे हैं।

ऐसा करने का सबसे आसान तरीका लैम्ब्डा फ़ंक्शन के साथ .apply का उपयोग करना हो सकता है ताकि यह एक समय में एक ही मान पर संचालित हो।

df['Probability'] = df['Probability'].apply(lambda x: x+0.1 if x%2==0 else x)
df['Cost'] = df.apply(lambda x: x['Cost']+x['Cost']*.01 if x['Color']=='Red' else x['Cost'], axis=1)
     Color  Probability  Flower      Cost
0      Red          2.6       0    37.886
1    Green          1.8       0   329.630
2     Blue          6.1       1   565.460
3    Brown          1.8       1   162.450
4     Blue          5.8       0   490.280
5    Green          6.2       0   516.940
6      Red          4.1       0    44.175
7    Brown          6.5       0   737.200
8     Blue          6.7       1   790.600
9    Green          5.2       0   446.040
10     Red          7.8       1    87.487
11  Yellow          4.1       1   469.510
12   Green          7.0       1   718.520
13     Red          0.5       0    12.199
14  Yellow          9.6       0  1097.160
15   Brown          1.5       0    54.830
16    Blue          6.2       1   610.690
17   Green          8.9       1   825.520
18     Red          2.3       0    34.686
19  Yellow          9.1       1   991.260

यदि आपको किसी भी तरह डेटाफ्रेम के माध्यम से लूप करना है, तो आप DataFrame.iterrows() का उपयोग कर सकते हैं जो इंडेक्स के लिए मानों का एक टपल देगा, और प्रत्येक पुनरावृत्ति पर पंक्ति देगा, और उसी तर्क को लागू करेगा:

for i,row in df.iterrows():
    if int(str(row['Probability'])[-1])%2==0: # ending with even
        df.loc[i, 'Probability'] += 0.1
    if row['Color']=='Red':
        df.loc[i, 'Cost'] += row['Cost']*0.01
0
ThePyGuy 5 सितंबर 2021, 02:24

आप एक बूलियन ऑक्सियलरी कॉलम बना सकते हैं और मानों को 0.1 से गुणा कर सकते हैं और उन्हें जोड़ सकते हैं, क्योंकि अगर बूलियन गलत है तो इसका मूल रूप से मतलब होगा value + 0 * 0.1

df['Probability'] = df['Probability'] + ((df['Probability'] %2 == 0) * 0.1)

या आप सीधे numpy का उपयोग करते हैं जहां:

import numpy as np
df['Probability'] = np.where((df['Probability'] %2 == 0), df['Probability'] + 0.1, df['Probability'])
0
Andreas 5 सितंबर 2021, 01:13