Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
String 通过按类型分组创建新列,新列';s值为整个组';s列值_String_Python 2.7_Pandas_Group By_Aggregate - Fatal编程技术网

String 通过按类型分组创建新列,新列';s值为整个组';s列值

String 通过按类型分组创建新列,新列';s值为整个组';s列值,string,python-2.7,pandas,group-by,aggregate,String,Python 2.7,Pandas,Group By,Aggregate,我有一个熊猫数据框,基本上看起来像这样: 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

我有一个熊猫数据框,基本上看起来像这样:

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(字面意思)中不断得到结果

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


提前谢谢

很抱歉,您是在这样做吗:

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函数,该函数连接字符串值


您尝试失败的原因是您的函数应用于其余列,而不是专门应用于字符串列。此外,这里的
转换
返回一个序列,该序列的索引与原始df对齐。

就像一个符咒。我现在看得很清楚。非常感谢你!
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