python - 连接两个 DataFrame 并替换 Python 中的列值

标签 python pandas dataframe join

我有数据框 df1:

    Expenses        Calendar    Actual
0   xyz             2020-01-01  10
1   xyz             2020-02-01  99
2   txn vol(new)    2020-01-01  5
3   txn vol(new)    2020-02-01  20
4   txn vol(tenu)   2020-01-01  30
5   txn vol(tenu)   2020-02-01  40

第二个数据帧 df2:

    Expenses    Calendar    Actual
0   txn vol(new)    2020-01-01  23
1   txn vol(new)    2020-02-01  32
2   txn vol(tenu)   2020-01-01  60

现在我想从 df1 读取所有数据,并使用费用 + 日历加入 df2,然后从 df2 替换 df1 中的实际值。

预期输出是:

    Expenses        Calendar    Actual
0   xyz             2020-01-01  10
1   xyz             2020-02-01  99
2   txn vol(new)    2020-01-01  23
3   txn vol(new)    2020-02-01  32
4   txn vol(tenu)   2020-01-01  60
5   txn vol(tenu)   2020-02-01  40

我正在使用下面的代码

cols_to_replace = ['Actual']
df1.loc[df1.set_index(['Calendar','Expenses']).index.isin(df2.set_index(['Calendar','Expenses']).index), cols_to_replace] = df2.loc[df2.set_index(['Calendar','Expenses']).index.isin(df1.set_index(['Calendar','Expenses']).index),cols_to_replace].values

当 df1 中有小数据时它可以工作。当它有(10K 记录)时,更新会使用错误的值。 df1 有 10K 条记录,df2 有 150 条记录。 有人可以建议如何解决这个问题吗?

谢谢

最佳答案

如果我正确理解您的解决方案,似乎假设 (1) Calendar-Expenses 组合是唯一的,并且 (2) 它们在两个数据帧中的出现都是对齐(相同顺序)?我怀疑(2)实际上并非如此?

另一个选项 - .merge() 也可以! - 可能是:

df1 = df1.set_index(["Expenses", "Calendar"])
df2 = df2.set_index(["Expenses", "Calendar"])
df1.loc[list(set(df1.index).intersection(df2.index)), "Actual"] = df2["Actual"]
df2 = df2.reset_index()  # If the original df2 is still needed
df1 = df1.reset_index()

关于python - 连接两个 DataFrame 并替换 Python 中的列值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73299348/

相关文章:

python - Windows下运行Galde Gtk3+ Python

python - 在 Pandas 中重新索引并转换为 json

python - 比较 2 个 DataFrame 的半匹配行

python - 在DataFrame的开头(最左端)插入一列

python - 搜索排序列表?

PythonNet - 如何填充 __dict__ - ipython 可以,python 没有

python - 计算数据帧切片的统计信息

r - 如何通过重复字符在R中设置列名?

python - 使用列表中的任何值进行逻辑检查?

python - Pandas key 错误 : 'occurred at index 0'