2016-12-13 66 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