पंडों के स्तंभ का कुल प्राप्त करें


107

लक्ष्य

मैं, जैसा कि नीचे एकाधिक स्तंभों के साथ दिखाया गया है, और स्तंभ की कुल प्राप्त करना चाहते हैं, एक पांडा डेटा फ्रेम है MyColumn


डेटा फ़्रेम -df:

print df

           X           MyColumn  Y              Z   
0          A           84        13.0           69.0   
1          B           76         77.0          127.0   
2          C           28         69.0           16.0   
3          D           28         28.0           31.0   
4          E           19         20.0           85.0   
5          F           84        193.0           70.0   

मेरा प्रयास :

मैंने उपयोग करने वाले कॉलम का योग पाने का प्रयास किया है groupbyऔर .sum():

Total = df.groupby['MyColumn'].sum()

print Total

यह निम्न त्रुटि का कारण बनता है:

TypeError: 'instancemethod' object has no attribute '__getitem__'

अपेक्षित उत्पादन

मुझे उम्मीद है कि आउटपुट का अनुसरण किया जाएगा:

319

या वैकल्पिक रूप से, मैं कुल मिलाकर dfएक नए rowहकदार के साथ संपादित होना चाहूंगा TOTAL:

           X           MyColumn  Y              Z   
0          A           84        13.0           69.0   
1          B           76         77.0          127.0   
2          C           28         69.0           16.0   
3          D           28         28.0           31.0   
4          E           19         20.0           85.0   
5          F           84        193.0           70.0   
TOTAL                  319

11
पांडा पाइथोनिक क्यों नहीं है, इसके एक चित्रण के लिए, भ्रम से आगे नहीं देखें कि एक कॉलम को कैसे योग करें।
user1416227

जवाबों:


214

आपको उपयोग करना चाहिए sum:

Total = df['MyColumn'].sum()
print (Total)
319

तब आप के locसाथ प्रयोग करते हैं Series, उस स्थिति में सूचकांक को उसी विशिष्ट कॉलम के रूप में सेट किया जाना चाहिए जिसे आपको योग करने की आवश्यकता है:

df.loc['Total'] = pd.Series(df['MyColumn'].sum(), index = ['MyColumn'])
print (df)
         X  MyColumn      Y      Z
0        A      84.0   13.0   69.0
1        B      76.0   77.0  127.0
2        C      28.0   69.0   16.0
3        D      28.0   28.0   31.0
4        E      19.0   20.0   85.0
5        F      84.0  193.0   70.0
Total  NaN     319.0    NaN    NaN

क्योंकि यदि आप स्केलर पास करते हैं, तो सभी पंक्तियों के मान भरे जाएंगे:

df.loc['Total'] = df['MyColumn'].sum()
print (df)
         X  MyColumn      Y      Z
0        A        84   13.0   69.0
1        B        76   77.0  127.0
2        C        28   69.0   16.0
3        D        28   28.0   31.0
4        E        19   20.0   85.0
5        F        84  193.0   70.0
Total  319       319  319.0  319.0

दो अन्य समाधान के साथ हैं at, और ixनीचे दिए गए एप्लिकेशन देखें:

df.at['Total', 'MyColumn'] = df['MyColumn'].sum()
print (df)
         X  MyColumn      Y      Z
0        A      84.0   13.0   69.0
1        B      76.0   77.0  127.0
2        C      28.0   69.0   16.0
3        D      28.0   28.0   31.0
4        E      19.0   20.0   85.0
5        F      84.0  193.0   70.0
Total  NaN     319.0    NaN    NaN

df.ix['Total', 'MyColumn'] = df['MyColumn'].sum()
print (df)
         X  MyColumn      Y      Z
0        A      84.0   13.0   69.0
1        B      76.0   77.0  127.0
2        C      28.0   69.0   16.0
3        D      28.0   28.0   31.0
4        E      19.0   20.0   85.0
5        F      84.0  193.0   70.0
Total  NaN     319.0    NaN    NaN

नोट: जब से पंडों v0.20, ixपदावनत किया गया है। उपयोग locया ilocइसके बजाय।


यह बहुत अच्छा है :) स्पष्टीकरण के लिए धन्यवाद, क्या मैं पूछ सकता हूं कि .locउपरोक्त उदाहरण में क्या है?
LearningToJava


atविस्तार के साथ सेटिंग के लिए भी काम करता है, अंतिम संपादन देखें।
jezrael

धन्यवाद, क्या कोई पसंदीदा तरीका है?
LearningToJava

1
हममम, डॉक्स का कहना है The .loc/.ix/[] operations can perform enlargement when setting a non-existant key for that axis., तो locया ixया []। अगले भाग में लिखा गया है, at may enlarge the object in-place as above if the indexer is missing.इसलिए सभी विधियाँ अच्छी हैं, लेकिन atमुझे लगता है कि सबसे तेज़ है।
jezrael

22

एक और विकल्प जो आप यहां ले सकते हैं:

df.loc["Total", "MyColumn"] = df.MyColumn.sum()

#         X  MyColumn      Y       Z
#0        A     84.0    13.0    69.0
#1        B     76.0    77.0   127.0
#2        C     28.0    69.0    16.0
#3        D     28.0    28.0    31.0
#4        E     19.0    20.0    85.0
#5        F     84.0   193.0    70.0
#Total  NaN    319.0     NaN     NaN

आप append()विधि का उपयोग भी कर सकते हैं :

df.append(pd.DataFrame(df.MyColumn.sum(), index = ["Total"], columns=["MyColumn"]))

यहां छवि विवरण दर्ज करें


अपडेट करें:

यदि आपको सभी संख्यात्मक स्तंभों के लिए राशि जोड़नी है, तो आप निम्नलिखित में से एक कर सकते हैं:

appendइसे कार्यात्मक तरीके से करने के लिए उपयोग करें (मूल डेटा फ़्रेम को नहीं बदलता है):

# select numeric columns and calculate the sums
sums = df.select_dtypes(pd.np.number).sum().rename('total')

# append sums to the data frame
df.append(sums)
#         X  MyColumn      Y      Z
#0        A      84.0   13.0   69.0
#1        B      76.0   77.0  127.0
#2        C      28.0   69.0   16.0
#3        D      28.0   28.0   31.0
#4        E      19.0   20.0   85.0
#5        F      84.0  193.0   70.0
#total  NaN     319.0  400.0  398.0

locजगह में डेटा फ्रेम म्यूट करने के लिए उपयोग करें :

df.loc['total'] = df.select_dtypes(pd.np.number).sum()
df
#         X  MyColumn      Y      Z
#0        A      84.0   13.0   69.0
#1        B      76.0   77.0  127.0
#2        C      28.0   69.0   16.0
#3        D      28.0   28.0   31.0
#4        E      19.0   20.0   85.0
#5        F      84.0  193.0   70.0
#total  NaN     638.0  800.0  796.0

सभी कॉलम के योग के बारे में क्या?
फ़ॉफ़ी

9

एक डेटाफ्रेम की लंबाई प्राप्त करने के समान len(df), निम्नलिखित ने पांडा और ब्लेज़ के लिए काम किया:

Total = sum(df['MyColumn'])

या वैकल्पिक रूप से

Total = sum(df.MyColumn)
print Total

2

स्तंभ के योग के दो तरीके हैं

डेटासेट = pd.read_csv ("data.csv")

1: योग (डेटासेट। कॉलम_नाम)

2: डेटासेट ['कॉलम_नाम']]

अगर इसमें कोई समस्या है तो कृपया मुझे सुधारें ..


1

अन्य विकल्प के रूप में, आप नीचे जैसा कुछ कर सकते हैं

Group   Valuation   amount
    0   BKB Tube    156
    1   BKB Tube    143
    2   BKB Tube    67
    3   BAC Tube    176
    4   BAC Tube    39
    5   JDK Tube    75
    6   JDK Tube    35
    7   JDK Tube    155
    8   ETH Tube    38
    9   ETH Tube    56

स्क्रिप्ट के नीचे, आप उपरोक्त डेटा के लिए उपयोग कर सकते हैं

import pandas as pd    
data = pd.read_csv("daata1.csv")
bytreatment = data.groupby('Group')
bytreatment['amount'].sum()
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.