Pandas:检查两个数据帧是否匹配值,然后根据实验室填充一行

2024-07-02 14:18:55 发布

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

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

例如,我有第一个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

对于这类问题,MATLAB我会取我的两个矩阵,使用嵌套的For循环迭代来找到值。在Python中我做了:

^{pr2}$

但我收到这个警告,我必须控制+C才能离开它继续:

SettingWithCopyWarning: A value is trying to be set on a copy of a slice from a DataFrame

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

从技术上讲,这段代码是可行的,我的数据也被填充了,但我知道这可能不是解决问题的一个很好的方法。对于这个小例子,它并没有强迫我控制+C,但是当我的df1有数千行长的时候,它会这样做。在


Tags: dataframeoutcol2col3col1df1df2non
2条回答

使用merge

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

^{pr2}$

简单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

相关问题 更多 >