특정 조건을 세고 합산하는 판다
판다에는 특정 조건을 합산하는 SUMIF와 Excel에서 특정 조건의 값을 계산하는 COUNTIF의 동등한 기능을 수행하는 단일 기능이 있습니까?
사용할 수 있는 여러 단계 기능이 있다는 것을 알고 있습니다.
예를 들면sumif
사용할 수 있습니다(df.map(lambda x: condition) or df.size())
그 다음에 사용.sum()
에 대해서도countif
사용할 수 있습니다(groupby functions
그리고 내 대답을 찾거나 필터를 사용하고 그리고..count())
.
조건과 데이터 프레임을 입력하고 합계 또는 카운트된 결과를 얻는 이러한 기능을 수행하는 간단한 한 단계 프로세스가 있습니까?
먼저 조건부 선택을 하고 다음을 사용하여 선택 결과를 요약할 수 있습니다.sum
기능.
>> df = pd.DataFrame({'a': [1, 2, 3]})
>> df[df.a > 1].sum()
a 5
dtype: int64
두 가지 이상의 조건이 있는 경우:
>> df[(df.a > 1) & (df.a < 3)].sum()
a 2
dtype: int64
당신이 하고 싶다면,COUNTIF
그냥 대체합니다.sum()
와 함께count()
다음과 같은 데이터 프레임의 고급 인덱싱 기능에 대해서는 언급하지 않았습니다.
>>> df = pd.DataFrame({"class":[1,1,1,2,2], "value":[1,2,3,4,5]})
>>> df[df["class"]==1].sum()
class 3
value 6
dtype: int64
>>> df[df["class"]==1].sum()["value"]
6
>>> df[df["class"]==1].count()["value"]
3
대체할 수 있습니다.df["class"]==1
다른 조건으로
저는 보통 논리적 조건 열 위에 numpy sum을 사용합니다.
>>> import numpy as np
>>> import pandas as pd
>>> df = pd.DataFrame({'Age' : [20,24,18,5,78]})
>>> np.sum(df['Age'] > 20)
2
위에 제시된 솔루션보다 약간 짧은 것 같습니다.
여러 조건(예: COUNTIFS/SUMIFS)의 경우 편리한 방법은 다음과 같습니다.query
크기가 큰 프레임(성능이 실제로 중요한 경우)에서는 매우 빠르고 괄호, 비트 단위 등에 대해 걱정할 필요가 없기 때문입니다.예를 들어, 계산할 경우=SUMIFS(C2:C8, A2:A8,">1", B2:B8, "<3")
사용할 수 있습니다.
df.query("A>1 and B<3")['C'].sum()
# or
df.iloc[:8].query("A>1 and B<3")['C'].sum() # where the range is specified as in SUMIFS
COUNTIFS의 경우 조건을 간단히 요약할 수 있습니다.예를 들어, 계산할 경우=COUNTIFS(A2:A8,">0", B2:B8, "<3")
할 수 있는 일:
countifs = ((df['A']>1) & (df['B']<3)).sum()
아니면 그냥 전화.query
그리고 결과의 길이를 계산합니다.
countifs = len(df.query("A>1 and B<3"))
또한 다음을 사용하여 COUNTIFS에 범위를 제공하는 방법과 유사한 범위를 지정할 수 있습니다.iloc
:
countifs = len(df.iloc[:8].query("A>1 and B<3"))
행 단위로 COUNTIF/SUMIF를 수행하려면 다음을 사용할 수 있습니다.axis=1
논쟁.다시, 범위는 열 목록으로 제공됩니다.['A', 'B']
) 범위가 COUNTIF에 공급되는 방식과 유사합니다.
또한 COUNTIF(COUNTIFS에 해당하는 판다와 유사)의 경우 조건을 합산하면 충분하지만 SUMIF의 경우 프레임을 인덱싱해야 합니다.
df['COUNTIF'] = (df[['A', 'B']] > 1).sum(axis=1)
df['SUMIF'] = df[df[['A', 'B']] > 1].sum(axis=1)
# equivalently, we can use `where` to make a filter as well
df['SUMIF'] = df.where(df[['A', 'B']] > 1, 0).sum(axis=1)
# can use `agg` to compute countif and sumif in one line.
df[['COUNTIF', 'SUMIF']] = df[df[['A', 'B']] > 1].agg(['count', 'sum'], axis=1)
열 단위로 COUNTIF/SUMIF를 수행하려면 다음을 사용할 수 있습니다.axis=0
인수(기본값)입니다.여기서 범위(처음 3행)는 다음을 사용하여 선택됩니다.iloc
.
df.loc['COUNTIF'] = (df.iloc[:3] > 1).sum()
df.loc['SUMIF'] = df.where(df.iloc[:3] > 1, 0).sum()
# or
df.loc['SUMIF'] = df[df.iloc[:3] > 1].sum()
여러 행/열에 걸친 COUNTIF/SUMIF의 경우, 예를 들어,=COUNTIF(A2:B4, ">1")
,불러sum
두 번(한 번은 열 단위 합에 대해, 다른 한 번은 열 단위 합에 대해, 다른 한 번은 열 단위 합에 대해).
countif = (df.iloc[:4, :2]>1).sum().sum() # the range is determined using iloc
sumif = df[df.iloc[:4, :2] > 1].sum().sum() # first 4 rows and first 2 columns
언급URL : https://stackoverflow.com/questions/20995196/pandas-counting-and-summing-specific-conditions
'programing' 카테고리의 다른 글
왜 java.lang으로 끝나는 거지?잘못된 인수Casbah / Java MongoDB 드라이버에 대한 예외? (0) | 2023.05.13 |
---|---|
스토리보드에서 UIScrollView를 사용하는 방법 (0) | 2023.05.13 |
IR 저장소는 무엇이며 무엇에 사용됩니까? (0) | 2023.05.13 |
Windows 양식에서 양식 모달을 만들려면 어떻게 해야 합니까? (0) | 2023.05.13 |
wpf에서 MVVM이 있는 ComboBox의 SelectionChanged 이벤트를 처리하는 방법은 무엇입니까? (0) | 2023.05.13 |