2014-12-04 21 views
12

'u kullanarak birkaç satırdaki dizeleri birleştirin Panda'larda gruplanmış bire bağlı olarak bir veri dizisinde birkaç dizeyi birleştirmek istiyorum.Pandas groupby

Bu benim kod şimdiye kadar geçerli: Ben GroupBy kullanmak ve bazı uygulayabilirsiniz nasıl

enter image description here

alamadım:

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) 

Ben Sonuç şu şekilde bakmak istiyorum "Metin" sütununda dizelerin birleştirme sıralaması. Herhangi bir yardım takdir!

cevap

18

Daha sonra, 'name' ve 'month' sütunları GroupBy orijinal df hizalanmış verileri döndürür transform arayıp metin girişlerini join nerede lambda uygulayabilirsiniz:

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 

Ben geçerek orijinal df sub burada ve daha sonra ilgi df[['name','text','month']] sütunlarının bir liste drop_duplicates

DÜZENLEME aslında ben tam o arayıp tamir çağrı:

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 

güncelleme

lambda burada gereksizdir:

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 
2

EdChum tarafından cevap pek çok esneklik sağlar ama sadece bir dizeleri concateate istiyorsanız Ayrıca liste nesnelerini de sütun yapabilirsiniz:

output_series = df.groupby(['name','month'])['text'].apply(list)

+0

Not: Bu, yalnızca bir kerede bir sütunla çalışır. – ybull