2016-04-11 28 views
1
ile Pandalar üzerinde birleştirme

Ben bir csv aşağıdaki veriler:Grup değerleri ve Python

c1 c2 
1  2,3 
3  4,5 
4  6 

:

c1 c2 
1  2 
1  3 
3  4 
3  5 
4  6 

Ne yapmak gerektiğini verileri işlemek ve aşağıdaki çıkışına sahip olmaktır Bu pandalarla mümkün mü?

Teşekkür

+0

'2,3' bir liste veya dize nedir? – Zero

+0

Sadece bir dize. Teşekkürler – estemendoza

+0

sadece df.groupby ('c1') ['c2'] 'yi uygulayın. Uygulayın (', '. Join) ' – EdChum

cevap

5

Önce astype tarafından string sütun c2 dönüştürmek ve daha sonra groupbyapplyjoin ile yapabilirsiniz. reset_index Son:

df['c2'] = df['c2'].astype(str) 
print df.groupby('c1')['c2'].apply(','.join).reset_index() 
    c1 c2 
0 1 2,3 
1 3 4,5 
2 4 6 

Eğer drop_duplicates gerekirse:

print df 
    c1 c2 
0 1 2 
1 1 3 
2 1 2 
3 1 3 
4 3 4 
5 3 5 
6 4 6 

df['c2'] = df['c2'].astype(str) 
df = df.groupby('c1')['c2'].apply(lambda x: ','.join(x.drop_duplicates())).reset_index() 
print df 
    c1 c2 
0 1 2,3 
1 3 4,5 
2 4 6 

sütunda c2 değerlerin uzunluğu tür DataFrame gerekiyorsa, str.len ve sort_values kullanın. Son Eğer drop kolon sort edebilirsiniz:

print df 
    c1 c2 
0 1 4 
1 1 5 
2 4 6 
3 2 7 
4 2 3 
5 2 2 
6 2 3 

df['c2'] = df['c2'].astype(str) 
df = df.groupby('c1')['c2'].apply(lambda x: ','.join(x.drop_duplicates())).reset_index() 

df['sort'] = df['c2'].str.len() 
df = df.sort_values('sort') 
df = df.drop('sort',axis=1) 
print df 
    c1  c2 
2 4  6 
0 1 4,5 
1 2 7,3,2 

print df.reset_index(drop=True) 
    c1  c2 
0 4  6 
1 1 4,5 
2 2 7,3,2 
+0

Teşekkürler! Aradığım şey bu! Sadece bir soru daha. "C2" sütunları bana bazen "2,2,2,2,3,3,3,3" gibi bir şey veren tekrarlanan değerlere sahip olabilir. Yalnızca benzersiz değerleri nasıl alabilirim ve çoğaltmasın? – estemendoza

+0

Lütfen düzenlenmiş cevabı kontrol edin. – jezrael

+0

Çok teşekkür ederim! – estemendoza