gpt4 book ai didi

python - 根据条件更新数据框列的有效方法

转载 作者:行者123 更新时间:2023-12-02 00:48:55 25 4
gpt4 key购买 nike

如果第二帧的条件适用,我想更新一个数据帧的值。

现在我正在遍历第二帧的每一行以找到它在第一帧中的位置并在找到时更新该行,但这是非常低资源效率的。

有没有更好的合并方法?

例如,对于在 T2 中找到的值,我想将 T1 中的解析更新为"is"

T1
user_id version issue Resolved
1 12345 crash no
2 12346 printing no
3 12347 screen no
3 12348 screen no


T2
user_id version issue
1 12345 crash
2 12346 printing


谢谢!!

预期输出:

T1
user_id version issue Resolved
1 12345 crash yes
2 12346 printing yes
3 12347 screen no
3 12348 screen no

最佳答案

您可以为新数据添加一个 yes resolved,然后将两者结合

T2['Resolved'] = 'yes'
dtypes = T1.dtypes.combine_first(T2.dtypes)
T3 = T2.combine_first(T1)
for k, v in dtypes.iteritems():
T3[k] = T3[k].astype(v)

输出:

   user_id  version     issue Resolved
0 1 12345 crash yes
1 2 12346 printing yes
2 3 12347 screen no
3 3 12348 screen no

我也找到了一种无需转换回 float 即可组合的方法:

T3 = T2.astype('object').combine_first(T1)

所以你不应该再需要 for 循环了

检查 combine_first 不起作用的解决方案。我创建了一个映射到是并将它们应用到第一帧:

T1 = pd.DataFrame({'A': [1,1,2,3], 'B': ['no', 'no','no','no'], 'C': ['no1', 'no2','no3','no4']})
T2 = pd.DataFrame({'A': [2, 3], 'B': ['yes','yes']})
mapitems = T2.set_index('A').to_dict()['B']
T1['B'] = T1.apply(lambda x: mapitems[x.A] if x.A in mapitems.keys() else x.B, axis=1)

关于python - 根据条件更新数据框列的有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59221747/

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