2016-12-13 4 views
1

私はパンダで何をしなければならないかについては、まだ適切なツールを見つけることはできません。 これはおそらくgroupby()が必要ですが、ドキュメントやウェブ上でまだPythonの方法(または他の方法)を見つけることができませんでした。特定の行の値を列方向に組み合わせる(パンダで)

ID name Town  s1  s2  s3  s4 

21 Joe Bonn  rd  fd  NaN  aa 
21 Joe Bonn  NaN  hg  kk  NaN 
22 Ann Oslo  jg  hg  zt  uz 
29 Mya Rome  rd  fd  NaN  aa 

私は値を結合(すなわち、指標であろう)は、同じIDを持つ行を結合したい:

Iは、同様の構造のデータを持つテーブル(30〜50列)を有します重複のない行は、文字列値の和集合の種類を形成します。

だから、結果は次のようになります。

21 Joe Bonn  rd  fd,hg kk  aa 
22 Ann Oslo  jg  hg  zt  uz 
29 Mya Rome  rd  fd  NaN  aa 

df.groupby(df.index).SUM()が推測したが、それはすぐ隣各インデックスに1はNaNを与えます。

答えて

3

はこのような何かを試してみてください、あなたはjoin機能を使用する前に、欠損値を削除する必要でした:

df.groupby(["ID", "name", "Town"], as_index=False).agg(lambda col: ','.join(col.dropna())) 

# ID name Town s1  s2 s3 s4 
#0 21 Joe Bonn rd fd,hg kk aa 
#1 22 Ann Oslo jg  hg zt uz 
#2 29 Mya Rome rd  fd   aa 
+0

おかげでたくさん!結局のところ、これは私が意図した通りの結果を出しています。私は重複を避けるためにラムダをマッサージする必要がありました: 'lambda col: '、'。join(numpy.unique(col.dropna()))' – Stapke

+0

重複を削除する場合と同様に、明示的に 'numpy'を呼び出さずに' drop_duplicates() 'を使います。 'lambda col: '、'。join(col.dropna()。drop_duplicates())' – Psidom

関連する問題