Panda 그룹을 사용하여 여러 행의 문자열을 연결합니다.
Pandas의 그룹화를 기반으로 데이터 프레임에 여러 문자열을 병합하고 싶습니다.
지금까지 제 코드는 다음과 같습니다.
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를 사용하고 "text" 열에 있는 문자열의 연결을 적용할 수 있는지 모르겠습니다.도움을 주시면 감사하겠습니다!
다음을 기준으로 그룹화할 수 있습니다.'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를 제출합니다.df[['name','text','month']]
때때로 전화를 걸어요.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
'이름'과 '달' 열을 기준으로 그룹화한 다음 Panda의 DataFrame 개체의 함수를 호출할 수 있습니다.
에서 제공하는 집계 기능agg()
함수를 사용하면 한 계산에서 그룹당 여러 개의 통계량을 계산할 수 있습니다.
df.groupby(['name', 'month'], as_index = False).agg({'text': ' '.join})
EdChum의 답변은 많은 유연성을 제공하지만 문자열을 목록 개체 열에 연결하려면 다음과 같은 작업도 수행할 수 있습니다.
output_series = df.groupby(['name','month'])['text'].apply(list)
목록에서 "텍스트"를 연결하려는 경우:
df.groupby(['name', 'month'], as_index = False).agg({'text': list})
나에게 위의 솔루션은 가깝지만 원하지 않는 솔루션을 추가했습니다./n's
그리고.dtype:object
그래서 여기 수정된 버전이 있습니다.
df.groupby(['name', 'month'])['text'].apply(lambda text: ''.join(text.to_string(index=False))).str.replace('(\\n)', '').reset_index()
다음 코드 행을 시도해 보십시오: -
df.groupby(['name','month'])['text'].apply(','.join).reset_index()
하지만, 이것은 오래된 질문입니다.하지만 혹시 모르니까요.아래 코드를 사용해보니 매력적으로 작동하는 것 같습니다.
text = ''.join(df[df['date'].dt.month==8]['text'])
다른 모든 대답 덕분에, 다음은 아마도 가장 간결하고 더 자연스럽게 느껴질 것입니다.사용.df.groupby("X")["A"].agg()
하나 이상의 선택한 열에 걸쳐 집계합니다.
df = pandas.DataFrame({'A' : ['a', 'a', 'b', 'c', 'c'],
'B' : ['i', 'j', 'k', 'i', 'j'],
'X' : [1, 2, 2, 1, 3]})
A B X
a i 1
a j 2
b k 2
c i 1
c j 3
df.groupby("X", as_index=False)["A"].agg(' '.join)
X A
1 a c
2 a b
3 c
df.groupby("X", as_index=False)[["A", "B"]].agg(' '.join)
X A B
1 a c i i
2 a b j k
3 c j
언급URL : https://stackoverflow.com/questions/27298178/concatenate-strings-from-several-rows-using-pandas-groupby
'programing' 카테고리의 다른 글
Postgre는 어디에 있습니까?SQL에서 데이터베이스를 저장하시겠습니까? (0) | 2023.05.17 |
---|---|
비동기 대기가 추가 스레드를 생성하지 않는 경우 애플리케이션의 응답성을 어떻게 높입니까? (0) | 2023.05.17 |
PowerShell에서 개체 수를 계산하는 방법은 무엇입니까? (0) | 2023.05.17 |
Postgre에 데이터베이스가 있는지 확인합니다.셸을 사용한 SQL (0) | 2023.05.12 |
원격 오리진이 새 리포지토리에 대한 'git push'에 이미 있습니다. (0) | 2023.05.12 |