programing

팬더를 사용하여 주어진 조건에 맞는 열에 값을 합하려면 어떻게 해야 합니까?

css3 2023. 9. 12. 20:09

팬더를 사용하여 주어진 조건에 맞는 열에 값을 합하려면 어떻게 해야 합니까?

다음과 같은 데이터 프레임이 있다고 가정합니다.

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')

res

언급URL : https://stackoverflow.com/questions/28236305/how-do-i-sum-values-in-a-column-that-match-a-given-condition-using-pandas