데이터프레임 내에서 특정 열의 값이 2차원 리스트로 되어있을 때 특정 조건에 대해서 행끼리 더할 경우
2차원 리스트로 저장된 해당 열은 2차원리스트 형태를 그대로 유지하며 그 안의 1차원 리스트들을 합치고자 한다.
우선 예시로 세 개의 리스트를 만든다.
my_list = [['hello', 4, 2], ['안녕', 5, 4]]
my_list2 = [['판다스', 52, 25], ['데이터프레임', 0, 3]]
my_list3 = [['파이썬', 40, 20], ['안녕안녕', 10, 5], ['댓글문자열', 2, 3]]
각 행이 Date 와 이중리스트를 열의 값으로 갖는 데이터프레임으로 만들어 출력해보면 다음과 같다.
df_list = pd.DataFrame({'Date' : '2021-10-12', 'Comment' : [my_list]})
df_list = df_list.append({'Date' : '2021-10-12', 'Comment' : my_list2}, ignore_index=True)
df_list = df_list.append({'Date' : '2021-10-12', 'Comment' : my_list3}, ignore_index=True)
df_list
이제 세 행의 2차원 리스트를 갖는 열을 같은 Date에 대하여 더해
세 리스트를 더해서 print했을 때와 같은 결과를 데이터프레임 안에서 보고자 한다.
import itertools
def sum_comment(x):
d = []
d.extend(x)
dd = list(itertools.chain.from_iterable(d))
return dd
df_list_merge = df_list.groupby(['Date'], as_index=False).agg({'Comment' : lambda x : sum_comment(x)})
df_list_merge
python lambda 참고 :
2021.10.25 - [python] - [python] 파이썬 람다 함수 사용하기 (python lambda expression)
같은 Date를 갖는 행의 Comment열을 더할 것이므로 df_list에 groupby(['Date'])를 적용하고
agg에서 sum_comment 함수를 실행한다.
sum_comment 함수 안에서 groupby(['Date']) 조건을 만족하는 2차원 리스트들을 새로 만든 리스트 d에 추가한 후
itertools 모듈의 itertools.chain.from_iterable() 메서드를 사용해 flatten 하면
3차원리스트 -> 2차원리스트로 되어
[[['hello', 4, 2], ['안녕', 5, 4]], [['판다스', 52, 25], ['데이터프레임', 0, 3]], [['파이썬', 40, 20], ['안녕안녕', 10, 5], ['댓글문자열', 2, 3]]]
형태에서
[['hello', 4, 2], ['안녕', 5, 4], ['판다스', 52, 25], ['데이터프레임', 0, 3], ['파이썬', 40, 20], ['안녕안녕', 10, 5], ['댓글문자열', 2, 3]]
와 같은 기존의 2차원 리스트와 같은 형태로 변환되어 return한다.
데이터프레임을 확인해보면 같은 'Date'에 대해 Comment 들이 모두 합쳐져 2차원리스트에 담긴 것을 확인할 수 있다.
참고 :
https://blog.winterjung.dev/2017/04/21/list-of-lists-to-flatten
https://stackoverflow.com/questions/29583312/pandas-sum-of-duplicate-attributes
'Python' 카테고리의 다른 글
[python] 문자열 분리하기 합치기 ( split / join ) (0) | 2021.10.19 |
---|---|
[python] re.sub 정규표현식을 통한 문자열 치환 (특수문자 제거) (0) | 2021.10.19 |
[python] 여러개의 데이터프레임 합치기 (concat multiple dataframes in Python) (1) | 2021.10.07 |
[python] dictionary list에서 key에 따른 value들 더하기 (0) | 2021.10.06 |
[python] 문자열 공백 제거 replace 함수 사용하기 (0) | 2021.10.05 |
댓글