Pandas의 groupedby를 기반으로 데이터 프레임의 여러 문자열을 병합하고 싶습니다.
이것은 지금까지 내 코드입니다.
import pandas as pd
from io import StringIO
data = StringIO("""
"name1","hej","2014-11-01"
"name1","du","2014-11-02"
"name1","aj","2014-12-01"
"name1","oj","2014-12-02"
"name2","fin","2014-11-01"
"name2","katt","2014-11-02"
"name2","mycket","2014-12-01"
"name2","lite","2014-12-01"
""")
# load string as stream into dataframe
df = pd.read_csv(data,header=0, names=["name","text","date"],parse_dates=[2])
# add column with month
df["month"] = df["date"].apply(lambda x: x.month)
최종 결과가 다음과 같기를 바랍니다.
groupby를 사용하고 “텍스트”열에 문자열 연결을 적용하는 방법을 알지 못합니다. 어떤 도움을 주셔서 감사합니다!
답변
'name'
및 'month'
열을 그룹화 한 다음 transform
원본 df에 정렬 된 데이터를 반환 join
하고 텍스트 항목에 람다를 적용하는 호출 을 수행 할 수 있습니다 .
In [119]:
df['text'] = df[['name','text','month']].groupby(['name','month'])['text'].transform(lambda x: ','.join(x))
df[['name','text','month']].drop_duplicates()
Out[119]:
name text month
0 name1 hej,du 11
2 name1 aj,oj 12
4 name2 fin,katt 11
6 name2 mycket,lite 12
df[['name','text','month']]
여기 에 관심있는 열 목록을 전달하여 원본 df를 하위로 지정한 다음drop_duplicates
편집 실제로 난 그냥 호출 할 수 있습니다 apply
다음과 reset_index
:
In [124]:
df.groupby(['name','month'])['text'].apply(lambda x: ','.join(x)).reset_index()
Out[124]:
name month text
0 name1 11 hej,du
1 name1 12 aj,oj
2 name2 11 fin,katt
3 name2 12 mycket,lite
최신 정보
는 lambda
여기 불필요 :
In[38]:
df.groupby(['name','month'])['text'].apply(','.join).reset_index()
Out[38]:
name month text
0 name1 11 du
1 name1 12 aj,oj
2 name2 11 fin,katt
3 name2 12 mycket,lite
답변
답변
EdChum의 답변은 많은 유연성을 제공하지만 문자열을 목록 개체의 열로 연결하려는 경우 다음을 수행 할 수도 있습니다.
output_series = df.groupby(['name','month'])['text'].apply(list)
답변
나에게 위의 솔루션은 가깝지만 원치 않는 / n 및 dtype : object 추가되었으므로 수정 된 버전은 다음과 같습니다.
df.groupby(['name', 'month'])['text'].apply(lambda text: ''.join(text.to_string(index=False))).str.replace('(\\n)', '').reset_index()