Dataframe 생성
raw_data = {'date': ["20221201", "20221202", "20221202", "20221202", "20230102"],
            'col1': [10, 20, 20, 30, 40],
            'col2': [100, 200, 500, 300, 400]}
data = DataFrame(raw_data)
print(data)
       date  col1  col2
0  20221201    10   100
1  20221202    20   200
2  20221202    20   500
3  20221202    30   300
4  20230102    40   400
groupby
- 그룹객체를 만들어주는 함수로 Dataframe객체.groupby(기준이 되는 열이름)로 사용
 
grouped = data.groupby('date')
print(grouped)
for key, group in grouped:
    print("* key", key)
    print("* count", len(group))
    print(group.head())
    print('\n')
    
# <pandas.core.groupby.groupby.DataFrameGroupBy object at 0x0000021974982A90>
* key 20221201
* count 1
       date  col1  col2
0  20221201    10   100
* key 20221202
* count 3
       date  col1  col2
1  20221202    20   200
2  20221202    20   500
3  20221202    30   300
* key 20230102
* count 1
       date  col1  col2
4  20230102    40   400
agg
- 여러개의 함수를 여러 열에 적용
 - 한번에 여러 컬럼을 다르게 연산할 수 있다.
 - 문자열 같은 경우 join, 중복제거(set)등 으로 만들 수 있다.
 
groupby 후 agg
1 col1만 agg(set)
print(data.groupby('date')['col1'].agg(set))
print(type(data.groupby('date')['col1'].agg(set)))
date
20221201        {10}
20221202    {20, 30}
20230102        {40}
Name: col1, dtype: object
<class 'pandas.core.series.Series'>
2 전체 컬럼 agg
print(data.groupby('date').agg(set))
print(type(data.groupby('date').agg(set)))
              col1             col2
date                               
20221201      {10}            {100}
20221202  {20, 30}  {200, 500, 300}
20230102      {40}            {400}
<class 'pandas.core.frame.DataFrame'>
3 groupby 후 agg로 특정 컬럼 sum하여 series반환하기
print(data.groupby('date').agg({'col1': 'sum'}))
print(type(data.groupby('date').agg({'col1': 'sum'})))
          col1
date          
20221201    10
20221202    70
20230102    40
<class 'pandas.core.frame.DataFrame'>
4 groupby 후 agg함수 적용 후 reset_index하여 값 열 변경
- Series의 인덱스를 리셋하는 reset_index() 사용 후 매게변수로 name을 사용하면 값(value) 열의 이름을 지정하는 데 사용됩니다. [2]
 
print(data.groupby('date')['col1'].agg(set))
#                   unit_list(value)
#  MATL_CD          
#        A       {Pump, Valve}
#        B       {Pump, Valve}
#        C              {Pump}
print(data.groupby('date')['col1'].agg(set).reset_index(name='hi'))
#      date                 hi
# 0       A       {Pump, Valve}
# 1       B       {Pump, Valve}
# 2       C              {Pump}
참고
[1] https://yganalyst.github.io/data_handling/Pd_13/
[2] https://pandas.pydata.org/docs/reference/api/pandas.Series.reset_index.html
          이 문서는
            jhy156456에 의해 작성되었습니다.
          
          마지막 수정 날짜:2024-04-25 23:20:00