通过对类型进行分组来创建新列,新列的值是整个组的列值

时间:2015-05-27 20:31:30

标签: string python-2.7 pandas group-by aggregate

我有一个基本上看起来像这样的pandas数据框:

type    item    string
1       0       aa
1       1       bb
1       2       cc

2       0       dd
2       1       ee
2       2       ff

我想以某种方式创建一个新专栏' newstring'基于小组'字符串'柱

type    item    string  newstring
1       0       aa      aa+bb+cc
1       1       bb      aa+bb+cc
1       2       cc      aa+bb+cc

2       0       dd      dd+ee+ff
2       1       ee      dd+ee+ff
2       2       ff      dd+ee+ff

我已经完成了

df.groupby('type').aggregate(lambda x: "+".join(x))
df.groupby('type').apply(lambda x: "+".join(x))

但是我继续在newstring(字面意思)

中得到结果
type    item    string  newstring
1       0       aa      type+item+string+newstring
1       1       bb      type+item+string+newstring
1       2       cc      type+item+string+newstring

2       0       dd      type+item+string+newstring
2       1       ee      type+item+string+newstring
2       2       ff      type+item+string+newstring

如何按特定列进行分组,然后将该组中一列的值附加到新列。

提前致谢!

1 个答案:

答案 0 :(得分:2)

对不起你:

In [14]:
df['new_string'] = df.groupby('type')['string'].transform(lambda x: '+'.join(x))
df

Out[14]:

   type  item string new_string
0     1     0     aa   aa+bb+cc
1     1     1     bb   aa+bb+cc
2     1     2     cc   aa+bb+cc
3     2     0     dd   dd+ee+ff
4     2     1     ee   dd+ee+ff
5     2     2     ff   dd+ee+ff

上面的'type'组然后我们在'string'列上调用transform并调用lambda函数join是字符串值。

您尝试失败的原因是因为您的函数正在应用于其余列而不是专门用于字符串列。此外,transform返回一个索引与原始df对齐的系列。