Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/326.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 熊猫:检查两个数据帧的匹配值,然后根据标签填充一行_Python_Pandas_Dataframe - Fatal编程技术网

Python 熊猫:检查两个数据帧的匹配值,然后根据标签填充一行

Python 熊猫:检查两个数据帧的匹配值,然后根据标签填充一行,python,pandas,dataframe,Python,Pandas,Dataframe,我在整个大学里主要使用MATLAB作为数学专业,我的编程只是建立数学方程和建模。现在我一直在学习使用Python,尤其是熊猫。我试图在一个数据帧的列中搜索值,并将它们与另一个数据帧的列中的值进行匹配。如果它们确实匹配,我希望它们为原始数据帧提供一个标签 例如,我有我的第一列employees,我想知道aliceB在我的第一个数据帧中是忙还是不忙,并在col3中标记为忙 df1 = {"col1":["aliceA", "aliceB", "aliceC"], "col2":["CO", "WA"

我在整个大学里主要使用MATLAB作为数学专业,我的编程只是建立数学方程和建模。现在我一直在学习使用Python,尤其是熊猫。我试图在一个数据帧的列中搜索值,并将它们与另一个数据帧的列中的值进行匹配。如果它们确实匹配,我希望它们为原始数据帧提供一个标签

例如,我有我的第一列employees,我想知道aliceB在我的第一个数据帧中是忙还是不忙,并在col3中标记为忙

df1 = {"col1":["aliceA", "aliceB", "aliceC"], "col2":["CO", "WA", "PA"]}
df1 = pd.DataFrame(df1)
df1['col3'] = np.nan
In[]df1
Out[]: 
     col1 col2  col3
0  aliceA   CO   NaN
1  aliceB   WA   NaN
2  aliceC   PA   NaN

df2 = {'col1': ["aliceB", "aliceA", "aliceC",  "bobC", "bobB", "bobA",], 'col2': ['Busy','Non-Busy','Busy','Non-Busy','Non-Busy','Busy']}
df2 = pd.DataFrame(df2)
In[]df2
Out[]: 
     col1      col2
0  aliceB      Busy
1  aliceA  Non-Busy
2  aliceC      Busy
3    bobC  Non-Busy
4    bobB  Non-Busy
5    bobA      Busy

***Preferred Output***
Out[]: 
     col1 col2      col3
0  aliceA   CO  Non-Busy
1  aliceB   WA      Busy
2  aliceC   PA      Busy
对于这类问题,我将使用我的两个矩阵,使用嵌套For循环进行迭代,以找到值。我用Python制作了:

for i in range(0, df2.shape[0]):
        for j in range(0, df1.shape[0]):
            if(df2.col1[i] == df1.col1[j]):
                df1.col3[j] = df2.col2[i]   
但是我得到了这个警告,我必须控制+C才能摆脱它继续:

SettingWithCopyWarning:试图在数据帧切片的副本上设置值

df1
Out[]: 
     col1 col2      col3
0  aliceA   CO  Non-Busy
1  aliceB   WA      Busy
2  aliceC   PA      Busy

从技术上讲,这段代码是有效的,我的数据是被填充的,但我知道这可能是解决我的问题的一个糟糕的方法。对于这个小示例,它并不强制我控制+C,但当我的df1有数千行长时,它会控制+C

Simple
map

df1.col3=df1.col1.map(df2.set_index('col1').col2)
df1
Out[31]: 
     col1 col2      col3
0  aliceA   CO  Non-Busy
1  aliceB   WA      Busy
2  aliceC   PA      Busy

使用
合并

df1.merge(df2.rename(columns={'col2': 'col3'}), on='col1')


非常感谢你!我将阅读更多关于使用
map
。将标记为最佳答案时,它将允许我在6分钟内。从技术上讲,这是工作,如果我没有col3在df1。如果我已经有了NaN值,它会给出一个包含NaN的col3_x列,然后是包含正确标签的col3_y列。为什么会发生这种情况?这是
merge
的行为,它将为两个数据帧中存在的列添加默认后缀。
     col1 col2      col3
0  aliceA   CO  Non-Busy
1  aliceB   WA      Busy
2  aliceC   PA      Busy