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

2024-04-29 07:14:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我有两个dataframe,dataframeA,以及它的子dataframeB,因为我需要根据A更改B中的一些值,使用匹配列在dataframe B中输入比较结果

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

我的搜索规则是,如果列名称dfB(例如name=321)中的单元格与a同名,则检查名称的id(例如B中的id=1,a中的id=2)

之后,将在B中具有相同id的所有项目(例如,在B中,name=321,14,13都具有id=2)标记为matching=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

是否有任何函数或算法可以帮助我完成我的目标


Tags: namein名称id目标dataframeforlen
1条回答
网友
1楼 · 发布于 2024-04-29 07:14:36
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

相关问题 更多 >