如何根据另一个数据框中的值更改一个数据框中的值?

时间:2019-08-27 19:10:49

标签: python dataframe

我有两个数据帧,数据帧A及其子数据帧B,因为我需要使用匹配列根据A来更改B中的一些值,以将比较结果输入到数据帧B中。 / p>

A:
name id 
321  1
18   1
234  2
12   2
234  2

... ...
B:
name id  matching
321  2
14   2
13   2
234  1
235  1

我的搜索规则是,如果df B列名中的单元格(例如name = 321)与A相同,请检查该名称的id(例如B中的id = 1, id = 2 in A)。

此后,将B中具有相同ID的所有项目(例如B中,名称= 321,14,13的所有ID = 2)标记为匹配= 1。

我想要类似的输出

B:
name id  matching
321  2   1
14   2   1
13   2   1
234  1   2
235  7   2

我的代码需要很长时间才能工作,但仍达不到我的目标:

for i in range(0,len(A)):
    for j in range(0,len(B)):

        if A.name[i]== B.name[j]:
            B.matching[j] = A.id[i]

我想要类似的输出

OutB:
name id  matching
321  2   1
14   2   1
13   2   1
234  1   2
235  7   2

是否有任何功能或算法可以帮助我完成目标?

1 个答案:

答案 0 :(得分:1)

pd.merge(A,B, on=name)

应该做您想要的。请参阅文档:

https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html#database-style-dataframe-or-named-series-joining-merging

文档中的示例

left = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'], 
'A': ['A0', 'A1', 'A2', 'A3'],
'B': ['B0', 'B1', 'B2', 'B3']})
right = pd.DataFrame({'key': ['K0', 'K1', 'K2', 'K3'],
'C': ['C0', 'C1', 'C2', 'C3'],
'D': ['D0', 'D1', 'D2', 'D3']}) 
>>> pd.merge(left,right,on='key')
  key   A   B   C   D
0  K0  A0  B0  C0  D0
1  K1  A1  B1  C1  D1
2  K2  A2  B2  C2  D2
3  K3  A3  B3  C3  D3