我试图在连接值
时找出是否存在删除数据框中的重复项示例:
df
key v1 v2
0 1 n/a a
1 2 n/a b
2 3 n/a c
3 2 n/a d
4 3 n/a e
输出应该是:
df_out
key v1 v2
0 1 n/a a
1 2 n/a b,d
2 3 n/a c,e
我尝试使用df.drop_duplicates()和一些循环来保存v2列值,但还没有。 我试图通过使用Pandas来完成它并使用out loop来完成它。
有人知道熊猫可以做到吗?答案 0 :(得分:3)
假设您有两列,这应该很简单。使用groupby
+ agg
。 v1
应汇总first
,v2
汇总','.join
。
df
key v1 v2
0 1 NaN a
1 2 NaN b
2 3 NaN c
3 2 NaN d
4 3 NaN e
(df.groupby('key')
.agg({'v1' : 'first', 'v2' : ','.join})
.reset_index()
.reindex(columns=df.columns))
key v1 v2
0 1 NaN a
1 2 NaN b,d
2 3 NaN c,e
如果您有多个此类列需要相同的聚合,请构建名为f
的聚合词典并将其传递给agg
。
答案 1 :(得分:1)
使用set
df.groupby('key').agg(lambda x : ','.join(set(x)))
Out[1255]:
v1 v2
key
1 n/a a
2 n/a b,d
3 n/a c,e
答案 2 :(得分:0)
使用apply
pandas.core.groupby.GroupBy.apply
GroupBy.apply(func,* args,** kwargs)[来源]
Apply function func group-wise and combine the results together.
df.groupby(["key", "v1"])["v2"].apply(list) # or apply(set) depending on your needs
输出:
key v1
1 n/a [a]
2 n/a [b, d]
3 n/a [c, e]
Name: v2, dtype: object