gpt4 book ai didi

python - 更新/合并和更新列 pandas 的子集

转载 作者:行者123 更新时间:2023-11-28 21:33:25 26 4
gpt4 key购买 nike

我有df1:

  ColA  ColB   ID1    ColC   ID2
0 a 1.0 45.0 xyz 23.0
1 b 2.0 56.0 abc 24.0
2 c 3.0 34.0 qwerty 28.0
3 d 4.0 34.0 wer 33.0
4 e NaN NaN NaN NaN

df2:

  ColA  ColB   ID1 ColC   ID2
0 i 0 45.0 NaN 23.0
1 j 0 56.0 NaN 24.0
2 NaN 0 NaN fd 25.0
3 NaN 0 NaN NaN 26.0
4 NaN 0 23.0 e 45.0
5 NaN 0 45.0 r NaN
6 NaN 0 56.0 NaN 29.0

我正在尝试仅在将是 choice= ['ColA','ColB'] 的列上更新 df2,其中 ID1ID2 在 2 个 dfs 中都匹配。

预期输出:

  ColA   ColB   ID1  ColC    ID2
0 a 1.0 45.0 NaN 23.0
1 b 2.0 56.0 NaN 24.0
2 NaN 0 NaN fd 25.0
3 NaN 0 NaN NaN 26.0
4 NaN 0 23.0 e 45.0
5 NaN 0 45.0 r NaN
6 NaN 0 56.0 NaN 29.0

到目前为止我已经尝试过:

u = df1.set_index(['ID1','ID2'])
u = u.loc[u.index.dropna()]
v = df2.set_index(['ID1','ID2'])
v= v.loc[v.index.dropna()]
v.update(u)
v.reset_index()

这给了我正确的更新(但我丢失了 NaN 的 ID)而且更新发生在我不想要的 ColC 上:

    ID1      ID2    ColA    ColB    ColC
0 45.0 23.0 a 1.0 xyz
1 56.0 24.0 b 2.0 abc
2 23.0 45.0 NaN 0.0 e
3 56.0 29.0 NaN 0.0 NaN

我也尝试过 merge 和 combine_first。无法根据选择列表找出执行此操作的最佳方法。

最佳答案

使用 mergeright 加入然后 combine_first :

choice= ['ColA','ColB']
joined = ['ID1','ID2']
c = choice + joined

df3 = df1[c].merge(df2[c], on=joined, suffixes=('','_'), how='right')[c]
print (df3)
ColA ColB ID1 ID2
0 a 1.0 45.0 23.0
1 b 2.0 56.0 24.0
2 NaN NaN NaN 25.0
3 NaN NaN NaN 26.0
4 NaN NaN 23.0 45.0
5 NaN NaN 45.0 NaN
6 NaN NaN 56.0 29.0

df2[c] = df3.combine_first(df2[c])
print (df2)
ColA ColB ID1 ColC ID2
0 a 1.0 45.0 NaN 23.0
1 b 2.0 56.0 NaN 24.0
2 NaN 0.0 NaN fd 25.0
3 NaN 0.0 NaN NaN 26.0
4 NaN 0.0 23.0 e 45.0
5 NaN 0.0 45.0 r NaN
6 NaN 0.0 56.0 NaN 29.0

关于python - 更新/合并和更新列 pandas 的子集,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54673038/

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