gpt4 book ai didi

python-3.x - 使用另一个值更新 pandas 数据框的正确方法

转载 作者:行者123 更新时间:2023-12-05 06:33:10 24 4
gpt4 key购买 nike

用另一个数据框中的值更新一个数据框中的多个列的正确方法是什么?

假设我有这两个数据框:

import pandas as pd

df1 = pd.DataFrame([['4', 'val1', 'val2.4', 'val3.4'],
['5', 'val1', 'val2.5', 'val3.5'],
['6', 'val1', 'val2.6', 'val3.6'],
['7', 'val1', 'val2.7', 'val3.7']],
columns=['account_id', 'field1', 'field2', 'field3'])

df2 = pd.DataFrame([['6', 'VAL2.6', 'VAL3.6'],
['5', 'VAL2.5', 'VAL3.5']],
columns=['account_id', 'field2', 'field3'])

请注意,df2 只有 d1 的行(以某种随机顺序)和列的子集。

我想用 df2 中的值替换 df1 中的值(它们存在的地方,在 account_id 上加入,通过 SQL 更新)。

一个解决方案是这样的

cols_to_update = ['field2', 'field3']
df1.loc[df1.account_id.isin(df2.account_id), cols_to_update] = df2[cols_to_update].values

但这并没有处理连接和结果

    account_id    field1    field2    field3
0 4 val1 val2.4 val3.4
1 5 val1 VAL2.6 VAL3.6
2 6 val1 VAL2.5 VAL3.5
3 7 val1 val2.7 val3.7

account_id 6 现在有错误的值。

我的问题是:

  1. 如何使用索引来实现类似的功能?

  2. 有没有 merge() 或 join() 的解决方案,在合并重复列时不那么乏味?

最佳答案

在分配之前对 df2 的值进行排序,即

cols_to_update = ['field2', 'field3']

df1.loc[df1.account_id.isin(df2.account_id), cols_to_update] = df2.sort_values(['account_id'])[cols_to_update].values

account_id field1 field2 field3
0 4 val1 val2.4 val3.4
1 5 val1 VAL2.5 VAL3.5
2 6 val1 VAL2.6 VAL3.6
3 7 val1 val2.7 val3.7

关于python-3.x - 使用另一个值更新 pandas 数据框的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50894720/

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