복붙노트

[PYTHON] Pandas : DataFrame에서 집계 된 열 만들기

PYTHON

Pandas : DataFrame에서 집계 된 열 만들기

아래의 DataFrame을 예로 들면,

In [83]:
df = pd.DataFrame({'A':[1,1,2,2],'B':[1,2,1,2],'values':np.arange(10,30,5)})
df
Out[83]:
   A  B  values
0  1  1      10
1  1  2      15
2  2  1      20
3  2  2      25

열 중 하나에서 일부 데이터 집계가 포함 된 새 열을 생성하는 간단한 방법은 무엇입니까?

예를 들어, A에서 항목에 대한 값을 합한 경우

In [84]:
df.groupby('A').sum()['values']
Out[84]:
A
1    25
2    45
Name: values

어떻게하면 되나요?

   A  B  values  sum_values_A
0  1  1      10            25
1  1  2      15            25
2  2  1      20            45
3  2  2      25            45

해결법

  1. ==============================

    1.

    In [20]: df = pd.DataFrame({'A':[1,1,2,2],'B':[1,2,1,2],'values':np.arange(10,30,5)})
    
    In [21]: df
    Out[21]:
       A  B  values
    0  1  1      10
    1  1  2      15
    2  2  1      20
    3  2  2      25
    
    In [22]: df['sum_values_A'] = df.groupby('A')['values'].transform(np.sum)
    
    In [23]: df
    Out[23]:
       A  B  values  sum_values_A
    0  1  1      10            25
    1  1  2      15            25
    2  2  1      20            45
    3  2  2      25            45
    
  2. ==============================

    2.조인을 사용하는 방법을 찾았습니다.

    조인을 사용하는 방법을 찾았습니다.

    In [101]:
    aggregated = df.groupby('A').sum()['values']
    aggregated.name = 'sum_values_A'
    df.join(aggregated,on='A')
    
    Out[101]:
       A  B  values  sum_values_A
    0  1  1      10            25
    1  1  2      15            25
    2  2  1      20            45
    3  2  2      25            45
    

    누구나 쉽게 할 수있는 방법이 있습니까?

  3. ==============================

    3.이것은 직접적인 것은 아니지만 매우 직관적이며 (다른 컬럼에서 새로운 컬럼을 작성하는 맵 사용) 많은 다른 경우에 적용될 수 있습니다.

    이것은 직접적인 것은 아니지만 매우 직관적이며 (다른 컬럼에서 새로운 컬럼을 작성하는 맵 사용) 많은 다른 경우에 적용될 수 있습니다.

    gb = df.groupby('A').sum()['values']
    
    def getvalue(x):
        return gb[x]
    
    df['sum'] = df['A'].map(getvalue)
    df
    
  4. ==============================

    4.

    In [15]: def sum_col(df, col, new_col):
       ....:     df[new_col] = df[col].sum()
       ....:     return df
    
    In [16]: df.groupby("A").apply(sum_col, 'values', 'sum_values_A')
    Out[16]: 
       A  B  values  sum_values_A
    0  1  1      10            25
    1  1  2      15            25
    2  2  1      20            45
    3  2  2      25            45
    
  5. from https://stackoverflow.com/questions/13256917/pandas-creating-aggregated-column-in-dataframe by cc-by-sa and MIT license