でパンダにマージ:私がする必要がどのようなグループ値と私はcsvファイルに次のデータを持っているのPython
c1 c2
1 2
1 3
3 4
3 5
4 6
は、そのデータを処理し、次の出力を持つことです。
c1 c2
1 2,3
3 4,5
4 6
これはパンダで可能ですか?
おかげ
でパンダにマージ:私がする必要がどのようなグループ値と私はcsvファイルに次のデータを持っているのPython
c1 c2
1 2
1 3
3 4
3 5
4 6
は、そのデータを処理し、次の出力を持つことです。
c1 c2
1 2,3
3 4,5
4 6
これはパンダで可能ですか?
おかげ
あなたが最初astype
によってstring
に列c2
を変換しgroupby
apply
join
とすることができます。最終reset_index
:あなたはstr.len
とsort_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
が必要な場合。最後にできることdrop
列sort
:
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
ありがとう!それが私が探していたものです!もう1つの質問。 "c2"列には、このような "2,2,2,2,3,3,3,3"のような値を繰り返し与えることができます。一意の値のみを取得し、重複を取得する方法はありますか? – estemendoza
編集した回答を確認してください。 – jezrael
ありがとうございます! – estemendoza
'2,3'はリストまたは文字列ですか? – Zero
文字列です。ありがとう! – estemendoza
'df.groupby( 'c1')['c2']。apply( '、'。join)' – EdChum