gpt4 book ai didi

python - Pandas 左连接重复键但不增加列数

转载 作者:太空宇宙 更新时间:2023-11-03 13:57:12 25 4
gpt4 key购买 nike

我正在尝试将我在 python 中导入的两个不同数据帧与 pandas 结合起来。它们是我所做的一些眼动追踪的结果。然而,其中一个包含用户注视的类和方法,这意味着对于每一行 dataframe1 都有 dataframe2 有一个额外的。现在这不会发生在每一行中,所以我不能只复制这些行,但我想的是每次 dataframe2 的索引有两个相同的索引时添加另一行。有点像这样:

dataframe1 = pd.DataFrame({'index':[1,2,3],'a':['asd','fgh','qwe'],'b':['dsa','hgf','ewq'],'c':['sad','gfh','wqe']})
dataframe1=dataframe1[['index','a','b','c']]
dataframe1
index a b c
0 1 asd dsa sad
1 2 fgh hgf gfh
2 3 qwe ewq wqe

dataframe2 = pd.DataFrame({'index':[1,1,2,3,3],'d':['zxc','cxz','xzc','zxc','xcz']})
dataframe2=dataframe2[['index','d']]
dataframe2
index d
0 1 zxc
1 1 cxz
2 2 xzc
3 3 zxc
4 3 xcz

预期结果:

index, a, b, c, d
1, asd, dsa, sad, zxc
1, nan, nan, nan, cxz
2, fgh, hgf, gfh, xzc
3, qwe, ewq, wqe, zxc
3, nan, nan, nan, xcz

有什么内置函数可以使用吗?这些值也可以只是具有相同索引的上一行的值。

最佳答案

pd.merge 与一个额外的 cumcounted 列一起使用:

u = df2.assign(cnt=df2.groupby('index').cumcount())
v = df.assign(cnt=df.groupby('index').cumcount())

u.merge(v, on=['index', 'cnt'], how='left').drop('cnt', 1)

index d a b c
0 1 zxc asd dsa sad
1 1 cxz NaN NaN NaN
2 2 xzc fgh hgf gfh
3 3 zxc qwe ewq wqe
4 3 xcz NaN NaN NaN

详情

我们为“索引”中的重复值引入了累积计数。

u = df2.assign(cnt=df2.groupby('index').cumcount())
u
index d cnt
0 1 zxc 0
1 1 cxz 1
2 2 xzc 0
3 3 zxc 0
4 3 xcz 1

v = df.assign(cnt=df.groupby('index').cumcount())
v
index a b c cnt
0 1 asd dsa sad 0
1 2 fgh hgf gfh 0
2 3 qwe ewq wqe 0

然后,我们在“index”和“cnt”上强制执行 LEFT JOIN wrt u。这样,在结果中引入了 NaN:

u.merge(v, on=['index', 'cnt'], how='left')

index d cnt a b c
0 1 zxc 0 asd dsa sad
1 1 cxz 1 NaN NaN NaN
2 2 xzc 0 fgh hgf gfh
3 3 zxc 0 qwe ewq wqe
4 3 xcz 1 NaN NaN NaN

最后一步是删除临时的“cnt”列。

关于python - Pandas 左连接重复键但不增加列数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53931983/

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