熊猫将多个字符串列分组为一列

时间:2020-04-07 21:25:55

标签: python pandas pandas-groupby

我将这些数据放入数据框

    id      data1        string1        string2
0    0          A        'house'       'garden'
1    1          B       'appart'           'wc'  
2    1          B         'flat'      'kitchen'  
3    2          C       'castle'         'cave'

我试图将其分组在['id','data1']列上,并创建一个新列,并以我的方式汇总结果。

    id   data1         string1        string2                                         concat_data
0    0       A         'house'       'garden'                                  'string1: house, string2: garden'
1    1       B        'appart'           'wc'    'string1: appart, string2: wc, string1: flat, string2: kitchen'
3    2       C        'castle'         'cave'                                   'string1: castle, string2: cave'

我已经尝试了许多使用groupby,汇总和应用的解决方案,但都无济于事。

1 个答案:

答案 0 :(得分:0)

这将起作用:

new_df = df.groupby(["id", "data1"]).apply(
    lambda group: ", ".join([str(dct).strip("{}") for dct in group[["string1", "string2"]].to_dict("records")])
).rename("concat_data").reset_index()

如果您还希望保留其他列,则应创建一个传递给apply的函数:

def concat_strings(group):
    concat_data = ", ".join([str(dct).strip("{}") for dct in group[["string1", "string2"]].to_dict("records")])
    return group[["string1", "string2"]].loc[0].append(pd.Series({"concat_data": concat_data}))

new_df = df.groupby(["id", "data1"]).apply(concat_strings).reset_index()