팬더를 사용하여 주어진 조건에 맞는 열에 값을 합하려면 어떻게 해야 합니까?
다음과 같은 데이터 프레임이 있다고 가정합니다.
a b
1 5
1 7
2 3
1 3
2 5
다음에 대한 값을 합산하고 싶습니다.b
어디에a = 1
,예를들면.이거면 나한테.5 + 7 + 3 = 15
.
팬더에서는 어떻게 해야 하나요?
여기서 가장 중요한 아이디어는 합산할 데이터를 선택한 후 합산하는 것입니다.이러한 데이터 선택은 여러 가지 방법으로 수행할 수 있으며, 그 중 몇 가지 방법은 아래에 나와 있습니다.
부울 색인
값을 선택하는 가장 일반적인 방법은 부울 인덱싱을 사용하는 것입니다.
이 방법을 사용하면 'a' 열이 다음과 같은 위치에 있는지 알 수 있습니다.1
그 다음 'b'열의 해당 행을 합합니다.사용가능loc
행과 열의 인덱싱을 처리하려면:
>>> df.loc[df['a'] == 1, 'b'].sum()
15
부울 색인은 다른 열로 확장할 수 있습니다.예를 들어 만약df
또한 'c'란 열을 포함하고 있으며, 'b'의 행을 'a'가 1이고 'c'가 2인 경우에 합산하고자 합니다.
df.loc[(df['a'] == 1) & (df['c'] == 2), 'b'].sum()
쿼리
데이터를 선택하는 또 다른 방법은 관심 있는 행을 필터링하는 데 사용하고 열 'b'를 선택한 다음 합하는 것입니다.
>>> df.query("a == 1")['b'].sum()
15
이 방법은 데이터를 보다 복잡하게 선택할 수 있도록 확장될 수 있습니다.
df.query("a == 1 and c == 2")['b'].sum()
이것은 부울 색인 접근법보다 조금 더 간결합니다.
그룹별
대안적인 접근 방식은 'a' 열의 값에 따라 DataFrame을 부품으로 분할하는 것입니다.그런 다음 각 파트를 합산하여 1s가 합산한 값을 다음과 같이 추출할 수 있습니다.
>>> df.groupby('a')['b'].sum()[1]
15
이 접근법은 부울 인덱싱을 사용하는 것보다 느릴 수 있지만 열에 있는 다른 값의 합을 확인하려는 경우 유용합니다.a
:
>>> df.groupby('a')['b'].sum()
a
1 15
2 8
그룹별 또는 loc을 사용하지 않고도 이 작업을 수행할 수 있습니다.코드에 조건을 포함시키기만 하면 됩니다.데이터 프레임의 이름을 df로 지정합니다.그러면 다음을 시도해 볼 수 있습니다.
df[df['a']==1]['b'].sum()
또는 다음을 시도해 볼 수도 있습니다.
sum(df[df['a']==1]['b'])
다른 방법은 python의 numpy 라이브러리를 사용하는 것입니다.
import numpy as np
print(np.where(df['a']==1, df['b'],0).sum())
합을 프레임에 열로 다시 할당하려면 다음을 사용할 수 있습니다.groupby.transform
합계가 원래 프레임과 동일한 인덱스를 갖도록 합니다.
# group by values of df.a
df['b_sum_by_a'] = df.groupby('a')['b'].transform('sum')
# group by whether df.a is 1 or not
df['b_sum_by_a'] = df.groupby(df['a']==1)['b'].transform('sum')
언급URL : https://stackoverflow.com/questions/28236305/how-do-i-sum-values-in-a-column-that-match-a-given-condition-using-pandas
'programing' 카테고리의 다른 글
오라클에서 sdo_geometry에서 lat and long으로 이동하는 방법 (0) | 2023.09.12 |
---|---|
Android: textSelector에서 비활성화된 버튼의 색상이 표시되지 않습니까? (0) | 2023.09.12 |
MariaDB: GRANT ALL을 수행할 때 오류 1045 (0) | 2023.09.07 |
명령줄에서 ssh를 통해 원격 시스템에서 MySQL 쿼리 실행 (0) | 2023.09.07 |
클릭 시 부트스트랩 드롭다운을 열어 둡니다. (0) | 2023.09.07 |