Pandas 열의 총계 가져 오기


107

표적

아래에 표시된 것처럼 여러 열이있는 Pandas 데이터 프레임이 있으며 열의 총계를 얻고 싶습니다 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
pandas가 비단뱀 적이 지 않은 이유에 대한 설명을 보려면 단순히 열을 합하는 방법에 대한 혼란보다 더 이상 보지 마십시오.
user1416227

답변:


215

다음을 사용해야합니다 sum.

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

그런 다음 locwith 를 사용 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


at확대 설정에서도 작동합니다. 마지막 편집을 참조하십시오.
jezrael dec.

감사합니다. 선호하는 방법이 있습니까?
LearningToJava

1
흠, 문서에 따르면 The .loc/.ix/[] operations can perform enlargement when setting a non-existant key for that axis., so loc또는 ix또는 []. 다음 섹션 에서는 쓰기입니다. at may enlarge the object in-place as above if the indexer is missing.그래서 모든 방법은 좋지만 at가장 빠르다고 생각합니다.
jezrael dec.

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)pandas 및 blaze에서 다음이 작동했습니다.

Total = sum(df['MyColumn'])

또는 대안으로

Total = sum(df.MyColumn)
print Total

2

열을 합하는 방법에는 두 가지가 있습니다.

데이터 세트 = pd.read_csv ( "data.csv")

1 : sum (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.