2017-05-27 56 views
2

我有一个数据集类似于这里多行与组大熊猫单细胞空格分隔值由

df1 = pd.DataFrame({'id':[1,1,2,2,2], 
         'value':[67,45,7,5,9]}) 

    id value 
    1  67 
    1  45 
    2  7 
    2  5 
    2  9 

我希望把它带到这种形式DF1。与空格分隔的一个单元格中的id对应的所有值。

id values 
    1 67 45 
    2 7 5 9 

这里是我的代码

df2 = pd.DataFrame(df1['id'].unique()) 
df2.columns=['id'] 
df2['values']=np.nan 

for i in df2['id']: 
    s='' 
    for k in df1[df1['id']==i]['value']: 
     s=s+' '+str(k) 
    df2.loc[df2['id']==i,'values']=s.lstrip() 
print(df2) 

是否有这样做的更pythonic的方法。我有70000级唯一的ID的,每个ID可能值范围为1至20

的数量,我使用 蟒蛇蟒蛇3.5 大熊猫0.20.1 numpy的1.12.1 窗口10

此外,如何能我们复制相同的中的R

回答

2

从int到字符串转换的“值”列,则执行关于“ID”和applystr.join功能的groupby

# Convert 'value' column to string. 
df1['value'] = df1['value'].astype(str) 

# Perform a groupby and apply a string join. 
df1 = df1.groupby('id')['value'].apply(' '.join).reset_index() 

输出结果:

id value 
0 1 67 45 
1 2 7 5 9 
0

这里是如何做到这一点的R.这是相同的方法

df = data.frame('id'=c(1,1,2,2,2),'value'=c(67,45,7,5,9)) 
aggregate(cbind(values=value)~id, 
      data = df, 
      FUN = function(x){paste(x,collapse=' ')})