हैलो, मैं एक फ़ंक्शन के माध्यम से एक वैश्विक चर 'गिनती' बढ़ाना चाहता था जिसे 1458 लंबाई के पांडा डेटाफ्रेम पर बुलाया जाएगा।

मैंने अन्य उत्तर पढ़े हैं जहां वे .apply() के स्थान पर नहीं होने के बारे में बात करते हैं। इसलिए मैं उनकी सलाह का पालन करता हूं लेकिन गिनती चर अभी भी 4 . है

count = 0
def cc(x):
   global count
   count += 1
   print(count) 

#Expected final value of count is 1458 but instead it is 4
# I think its 4, because 'PoolQC' is a categorical column with 4 possible values
# I want the count variable to be 1458 by the end instead it shows 4


all_data['tempo'] = all_data['PoolQC'].apply(cc)

# prints 4 instead of 1458
print("Count final value is ",count)
0
Gru 18 अक्टूबर 2018, 20:43

1 उत्तर

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

हां, देखा गया प्रभाव इसलिए है क्योंकि आपके पास कॉलम का श्रेणीबद्ध प्रकार है। यह पांडा का स्मार्ट है कि यह प्रत्येक श्रेणी के लिए आवेदन की गणना करता है। क्या केवल वही गिनना है जो आप वहां कर रहे हैं? मुझे नहीं लगता, लेकिन आपको ऐसी गणना की आवश्यकता क्यों है? क्या आप df.shape का उपयोग नहीं कर सकते?

कुछ विकल्प जो मैं यहाँ देख रहा हूँ:

  1. आप कॉलम का प्रकार बदल सकते हैं उदा।

all_data['tempo'] = all_data['PoolQC'].astype(str).apply(cc)

  1. आप विभिन्न गैर-श्रेणीबद्ध कॉलम का उपयोग कर सकते हैं

  2. आप df.shape का उपयोग करके देख सकते हैं कि आपके पास df में कितनी पंक्तियाँ हैं।

  3. आप all_data['tempo'] = df.apply(cc, axis=1) जैसे संपूर्ण डेटाफ़्रेम के लिए आवेदन का उपयोग कर सकते हैं। ऐसे मामले में आप अभी भी सीसी फ़ंक्शन के भीतर all_data['PoolQC'] में जो कुछ भी है उसका उपयोग कर सकते हैं, जैसे:

def cc(x): global count count += 1 print(count) return x['PoolQC']

1
Martyna 19 अक्टूबर 2018, 08:21