我将这些数据放入数据框
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,汇总和应用的解决方案,但都无济于事。
答案 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()