2016-12-13 57 views
1

我不會爲我在熊貓中需要做的事情提供正確的工具。 它可能需要groupby(),但我無法在文檔或Web上找到pythonic方式(或任何其他)。將某些行的值組合爲列(在熊貓中)

我有類似的結構的數據的表(30-50列):

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的組合(這將是索引),則值組合沒有重複的行,形成了一種字符串值的聯合。

那麼結果將是:

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()是一個猜測,但它只是給一個非數字旁邊的每個索引。

回答

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來避免重複:'lambda col:','。join(numpy.unique(col.dropna()))' – Stapke

+0

正如一個側面說明,如果你想刪除重複,你也可以使用'drop_duplicates()'而不顯式調用'numpy'。 'lambda col:','。join(col.dropna()。drop_duplicates())' – Psidom