gpt4 book ai didi

python - 查找 Pandas 数据帧之间的不同行,同时保留一个 df 中的所有原始数据

转载 作者:行者123 更新时间:2023-12-01 03:22:37 25 4
gpt4 key购买 nike

我有以下实际数据:

actual.code actual.distance
a 1
c 6
e 10

还有以下所有观测值的插值数据:

interpolated.code   interpolated.distance
a 2
b 4
c 7
d 4
e 9
f 1

我想要以下输出:

 output.code    output.distance
a 1
b 4
c 6
d 4
e 10
f 1

因此,对于没有实际数据的任何行,我想使用插值数据。我尝试了内部联接,但这似乎不起作用,因为我想保留第一个数据帧中的所有观察结果,并且仅在必要时使用第二个数据帧中的数据。

最佳答案

长版本是使用merge,同时将指标保留在结果中,然后将interpolated.distance替换为actual.distance > 基于指标:

df_merge = df1.merge(df2, left_on="actual.code", right_on="interpolated.code", how="right", indicator=True)
df_merge["interpolated.distance"] = df_merge["interpolated.distance"].where(df_merge["_merge"] != "both", df_merge["actual.distance"])
df_merge.drop(["actual.code", "actual.distance", "_merge"], axis=1).sort_values("interpolated.code")

# interpolated.code interpolated.distance
#0 a 1.0
#3 b 4.0
#1 c 6.0
#4 d 4.0
#2 e 10.0
#5 f 1.0
<小时/>

或者另一种选择,您可以使用 combine_first()df1 作为调用对象,在获取值时将优先考虑该对象,基本上设置两者的代码数据帧作为索引,并将距离与actual.distance结合作为调用对象,如果代码匹配,这将优先考虑actual.distance中的值:

(df1.set_index("actual.code")["actual.distance"]
.combine_first(df2.set_index("interpolated.code")["interpolated.distance"])
.rename_axis("output.code").rename("output.distance").reset_index())

#output.code output.distance
#0 a 1.0
#1 b 4.0
#2 c 6.0
#3 d 4.0
#4 e 10.0
#5 f 1.0

关于python - 查找 Pandas 数据帧之间的不同行,同时保留一个 df 中的所有原始数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41781818/

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