【问题标题】:Create a new column by grouping on type, new column's value is entire group's column value通过按类型分组创建一个新列,新列的值是整个组的列值
【发布时间】:2015-08-10 03:15:25
【问题描述】:

我有一个基本上看起来像这样的 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))

但我不断得到新字符串的结果(字面意思)

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

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

提前致谢!

【问题讨论】:

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


    【解决方案1】:

    在此之后你很抱歉:

    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,并调用join的字符串值的lambda函数。

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

    【讨论】:

    • 这就像一个魅力。现在我看到它相当明显。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-02-06
    • 1970-01-01
    • 1970-01-01
    • 2017-09-12
    • 2018-10-04
    • 2021-12-08
    • 2017-04-02
    相关资源
    最近更新 更多