Python 如何基于另一个数据帧的特定列的值更新一个数据帧的多列中的值
我有2个padas数据帧Python 如何基于另一个数据帧的特定列的值更新一个数据帧的多列中的值,python,pandas,dataframe,Python,Pandas,Dataframe,我有2个padas数据帧 df1 = pd.DataFrame({'id': [1001,1002,1004], 'col1': ["a","b","d"], 'col2': [1,2,6]}) df2 = pd.DataFrame({'id': [1001,1002,1003,1004,1005,1006,1007], 'a': [10,10,10,10,10,10,10],
df1 = pd.DataFrame({'id': [1001,1002,1004],
'col1': ["a","b","d"],
'col2': [1,2,6]})
df2 = pd.DataFrame({'id': [1001,1002,1003,1004,1005,1006,1007],
'a': [10,10,10,10,10,10,10],
'b': [2,2,2,2,2,2,2],
'c': [1,2,3,4,5,6,7],
'd': [5,5,5,5,5,4,5],
'e': [0,3,4,6,7,5,5]})
df1和df2具有公共id
当值出现在df1.col1中时,例如从相应的df2 id中减去df1.col2值,columnname=df1.col1值a
上述陈述可能令人困惑,但我将尝试用一个例子来解释:
df1 id 1001具有col1=a和col2=1
我想做的是从df2的a列中减去1,id 1001=10-1=9
在另一个例子中
df1 id=1004具有col1值=d和col2=6
因此,从对应于ID1004=5-6=-1的df2的d列中减去6
最终结果如下所示
a b c d e id
0 9 2 1 5 0 1001
1 10 0 2 5 3 1002
2 10 2 3 5 4 1003
3 10 2 4 -1 6 1004
4 10 2 5 5 7 1005
5 10 2 6 4 5 1006
6 10 2 7 5 5 1007
既然我必须在大数据集上重复这个练习很多次,那么我应该如何有效地解决这个问题呢
提前感谢使用lambda如下
df1.apply(lambda row : updateDF2(row), axis=1)
完整的示例代码是
import pandas as pd
df1 = pd.DataFrame({'id': [1001,1002,1004],
'col1': ["a","b","d"],
'col2': [1,2,6]})
df2 = pd.DataFrame({'id': [1001,1002,1003,1004,1005,1006,1007],
'a': [10,10,10,10,10,10,10],
'b': [2,2,2,2,2,2,2],
'c': [1,2,3,4,5,6,7],
'd': [5,5,5,5,5,4,5],
'e': [0,3,4,6,7,5,5]})
def updateDF2(row):
df2.loc[df2["id"] == row["id"], row["col1"]] -= row["col2"]
#df1.apply(lambda row : updateDF2(row), axis=1)
df1.apply(updateDF2, axis=1)
print(df2)
输出为
a b c d e id
0 9 2 1 5 0 1001
1 10 0 2 5 3 1002
2 10 2 3 5 4 1003
3 10 2 4 -1 6 1004
4 10 2 5 5 7 1005
5 10 2 6 4 5 1006
6 10 2 7 5 5 1007
[Finished in 0.9s]
您只需要向函数传递一个axis参数,它将按行而不是按列工作。我认为df1.applyupdateDF2,axis=1应该足够了