使用条件连接 groupby 中的字符串

时间:2021-02-02 23:46:52

标签: python pandas

我有以下数据框:

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()

2 个答案:

答案 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)