根据其他两列的比较填写一列(Pandas)

2024-06-02 08:24:04 发布

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

我试图在熊猫身上做到以下几点: 我有2个数据帧,它们都有很多列。 数据帧1有一个列a,这是我的任务感兴趣的; DataFrame 2有感兴趣的列B和C。在

需要做的是:遍历A列中的值,看看B列中是否存在相同的值。如果存在,则在Dataframe 1中创建一个列D,并用C中的值填充其相应的单元格,该值与从B中找到的值位于同一行。 如果A中的值在B中不存在,则用0填充D中的单元格。在

for i in range(len(df1)):
    if df1['A'].iloc[i] in df2.B.values:
        df1['D'].iloc[i] = df2['C'].iloc[i]
    else:
        df1['D'].iloc[i] = 0

这给了我一个错误:关键字“D”。如果我提前创建列D并填充它,例如,使用0,那么我会得到以下警告:一个值正试图在来自数据帧的切片的副本上设置。我怎么解决这个问题?或者有更好的方法来完成我想做的事情吗?在

非常感谢你的帮助!在


Tags: 数据indataframeforlenif错误range
1条回答
网友
1楼 · 发布于 2024-06-02 08:24:04

如果我理解正确:

考虑到这两个数据帧:

import pandas as pd
import numpy as np

np.random.seed(42)

df1=pd.DataFrame({'A':np.random.choice(list('abce'), 10)})
df2=pd.DataFrame({'B':list('abcd'), 'C':np.random.randn(4)})

>>> df1
   A
0  c
1  e
2  a
3  c
4  c
5  e
6  a
7  a
8  c
9  b

>>> df2
   B         C
0  a  0.279041
1  b  1.010515
2  c -0.580878
3  d -0.525170

使用合并可以实现您想要的效果:

^{pr2}$

然后重命名列:

new_df.columns=['A', 'D']

>>> new_df
   A         D
0  c -0.580878
1  e  0.000000
2  a  0.279041
3  c -0.580878
4  c -0.580878
5  e  0.000000
6  a  0.279041
7  a  0.279041
8  c -0.580878
9  b  1.010515

相关问题 更多 >