2016-04-11 12 views
1

でパンダにマージ:私がする必要がどのようなグループ値と私はcsvファイルに次のデータを持っているのPython

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

は、そのデータを処理し、次の出力を持つことです。

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

これはパンダで可能ですか?

おかげ

+0

'2,3'はリストまたは文字列ですか? – Zero

+0

文字列です。ありがとう! – estemendoza

+0

'df.groupby( 'c1')['c2']。apply( '、'。join)' – EdChum

答えて

5

あなたが最初astypeによってstringに列c2を変換しgroupbyapplyjoinとすることができます。最終reset_index:あなたはstr.lensort_valuesを使用し、列c2の値の長さによってソートDataFrameが必要な場合は

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 

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 

あなたはdrop_duplicatesが必要な場合。最後にできることdropsort

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

ありがとう!それが私が探していたものです!もう1つの質問。 "c2"列には、このような "2,2,2,2,3,3,3,3"のような値を繰り返し与えることができます。一意の値のみを取得し、重複を取得する方法はありますか? – estemendoza

+0

編集した回答を確認してください。 – jezrael

+0

ありがとうございます! – estemendoza

関連する問題