gpt4 book ai didi

python Pandas : concatenate rows with unique values

转载 作者:太空宇宙 更新时间:2023-11-04 03:39:33 24 4
gpt4 key购买 nike

在 Python pandas 中,我有一个大型数据框,如下所示:

df = pd.DataFrame ({'a' : ['foo', 'bar'] * 3,
'b' : ['foo2', 'bar2'] * 3,
'c' : ['foo3', 'bar3'] * 3,
'd' : ['q','w','e','r','t','y'],
'e' : ['q2','w2','e2','r2','t2','y2']})


a b c d e
1 bar bar2 bar3 w w2
3 bar bar2 bar3 r r2
5 bar bar2 bar3 y y2
4 foo foo2 foo3 t t2
2 foo foo2 foo3 e e2
0 foo foo2 foo3 q q2

它包含十几个具有重复值(a、b、c...)的列和一些具有唯一值(d、e)的列。我想删除所有重复的值并收集那些唯一的值,即:

     a     b     c  d   e
1 bar bar2 bar3 w,r,y w2,r2,y2
4 foo foo2 foo3 t,e,q t2,e2,q2

我们可以安全地假设唯一值仅在 'd' 和 'e' 中,而其余值总是重复的。

我能想到的一种解决方案是对所有重复的列进行分组,然后对唯一值应用串联操作:

df.groupby([df.a, df.b, df.c]).apply(lambda x: "{%s}" % ', '.join(x.d))

一个不便之处是,如果我想在我的输出中包含所有重复的列,我必须列出它们。更多的问题是我只连接“d”中的字符串,同时还需要“e”。

有什么建议吗?

最佳答案

我认为你可以这样做:

>>> df.groupby(['a', 'b', 'c']).agg(lambda col: ','.join(col))
d e
a b c
bar bar2 bar3 w,r,y w2,r2,y2
foo foo2 foo3 q,e,t q2,e2,t2

另一种方法是不列出所有列,而是只列出具有唯一值的列

>>> gr_columns = [x for x in df.columns if x not in ['d','e']]
>>> df.groupby(gr_columns).agg(lambda col: ','.join(col))
d e
a b c
bar bar2 bar3 w,r,y w2,r2,y2
foo foo2 foo3 q,e,t q2,e2,t2

关于 python Pandas : concatenate rows with unique values,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27174009/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com