gpt4 book ai didi

python - 根据列值合并数据框

转载 作者:行者123 更新时间:2023-11-28 22:12:34 27 4
gpt4 key购买 nike

我有 2 个大数据框,下面 2 个只是这 2 个的示例。

df1 = pd.DataFrame(columns=['node', 'st1', 'st2'], data=[['a', 1, -1], ['b', 2, 2], ['c', 3, 4]])

node st1 st2
a 1 -1
b 2 2
c 3 4

df2 = pd.DataFrame(columns=['node', 'st1', 'st2'], data=[['a', 8, 5], ['b', 4, 6]])

node st1 st2
a 8 5
b 4 6

我想更新 df1、st1 和 st2 列值,只有当两个数据帧中的节点名称匹配时,才能使用 df2、st1 和 st2 列值。此外,如果 df1 中的 st1 或 st2 列值等于 -1,则不要更新该行和列,即保持为 -1。结果看起来像,

node  st1  st2
a 8 -1
b 4 6
c 3 4

我尝试使用基本的 pandas merge 和 left join 合并 2 个数据帧,这会给我一个带有重复列的 df,然后遍历生成的 df 中的每一行以检查 st1 和 st2 的值,并替换只有当它不是-1 时才使用它们。但这在较大的数据帧中会花费很多时间,这就是为什么我想找到最有效的方法来做到这一点。

最佳答案

您可以将 node 设置为两个数据帧中的索引,将除 -1s 之外的所有值设置为 NaN 并使用 DataFrame.combine_first用共享索引的 df2 中的值填充 df1 中的 NaN:

df = df1.set_index('node')
df.where(df.eq(-1)).combine_first(df2.set_index('node')).fillna(df)

st1 st2
node
a 8.0 -1.0
b 4.0 6.0
c 3.0 4.0

关于python - 根据列值合并数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54712160/

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