我有以下数据框:
id v1 v2
1 a b
1 a d
2 c e
2 d e
2 f g
我需要在每个 id 组中使用逗号连接 v1 和 v2,有一个条件:
id v1 v2
1 a b,d
2 c,d,f e,e,g
在这种情况下,当 id=2, v2="e,e,g" 时,两个“e”都保留,因为 e 不是该组中的唯一值。但是,当 id=1 时,v1="a",因为 "a" 是该组中唯一的值。
我已经完成了连接部分,但我不确定如何实现这些条件。到目前为止,这是我的代码:
df.groupby(['id'])[['v1', 'v2']].agg(lambda x: ', '.join(x)).reset_index()
答案 0 :(得分:2)
您想在 lambda 函数中添加 if 语句。
print (df.groupby(['id'])[['v1', 'v2']].agg(lambda x: ', '.join(set(x)) if len(set(x))==1 else ', '.join(x)).reset_index())
如果 set(x) 等于 1,那么您只需传递 set(x) 否则您加入这些值。
输出结果为:
id v1 v2
0 1 a b, d
1 2 c, d, f e, e, g
答案 1 :(得分:0)
请试试
g=df.groupby('id').agg(list)