我有数据框 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/