รับคอลัมน์ Pandas ทั้งหมด


112

เป้าหมาย

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

คำตอบ:


222

คุณควรใช้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

หมายเหตุ:ตั้งแต่ Pandas v0.20 ixถูกเลิกใช้งาน ใช้locหรือilocแทน


เยี่ยมมาก :) ขอบคุณสำหรับคำอธิบายฉันขอถามได้.locไหมว่าในตัวอย่างข้างต้นทำอะไรได้บ้าง?
LearningToJava

locสำหรับการตั้งค่าที่มีการขยายตัว
jezrael

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

แล้วผลรวมของคอลัมน์ทั้งหมดล่ะ?
FaCoffee

9

คล้ายกับการรับความยาวของดาต้าเฟรมlen(df)สิ่งต่อไปนี้ใช้ได้กับแพนด้าและเปลวไฟ

Total = sum(df['MyColumn'])

หรืออีกทางหนึ่ง

Total = sum(df.MyColumn)
print Total

2

ผลรวมของคอลัมน์มีสองวิธี

ชุดข้อมูล = pd.read_csv ("data.csv")

1: ผลรวม (dataset.Column_name)

2: ชุดข้อมูล ['Column_Name']. sum ()

หากมีปัญหาใด ๆ กรุณาแก้ไขให้ฉัน ..


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()
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.