Python Pandas,通过ItErrors将一个数据帧的列值添加到另一个数据帧

Python Pandas,通过ItErrors将一个数据帧的列值添加到另一个数据帧,python,string,pandas,Python,String,Pandas,问题是: 我有两个数据帧(大量项): 我要做的是比较一列的字符串与第二个数据帧的列: for index, row in df1.iterrows(): if df.iloc[index][0] in df2['A'].tolist(): #I'm converting to list because it seems like it can't look into the column as an object 如果是这样,我想做的是在匹配字符串的同一行中选择df2['B']值,并最

问题是:

我有两个数据帧(大量项):

我要做的是比较一列的字符串与第二个数据帧的列:

for index, row in df1.iterrows():
    if df.iloc[index][0] in df2['A'].tolist(): #I'm converting to list because it seems like it can't look into the column as an object
如果是这样,我想做的是在匹配字符串的同一行中选择
df2['B']
值,并最终将其放入
df1
中的一个新列中,在该列中,我将有如下内容:

df1 = 0    1    2    B
      str  str  str  str
      str  str  str  nan
      str  str  str  nan
      str  str  str  str
我觉得
iterrows()
不是最好的方法,但我没有足够的技能找到更好的解决方案


谢谢。

如果我正确理解了你的问题,你应该能够做到以下几点。第一条语句计算一个临时列“temp”,如果它能在df2['a']中找到df1的值,则该临时列为True。如果temp为True,则第二行在df2['B']中查找该值,否则返回np.NaN:

for col in df1.columns:
    df1['temp'] = df1[col].isin(df2['A'].unique())
    df1[col] = df1[[col,'temp']].apply(lambda x: df2['B'].get_value(df2[df2['A'] == x[col]].index[0]]) if x['temp'] else np.NaN, axis=1)

假设我正确理解了你的问题:

您可以使用.isin()方法:

请注意,数据帧的大小必须相同,此方法才能工作

我刚刚想到的另一件事是使用字典和应用程序。我假设您在比较列中有唯一的值

mask = df2['compare_column'].isin(df1['compare_column'])
dictionary = dict(df2[['compare_column','new_column']][mask].values)
df1['B'] = df1.apply(lambda x: dictionary[x['compare_column']], axis=1)

你能不能用一个例子,而不仅仅是使用“str”占位符来详细说明一下?提供示例,例如df1.head()。to_dict()将有助于将问题可视化。
mask = df2['your_column'].isin(df1['your_other_column'])
df1.loc[mask,'new_column']  = df2.loc[mask,'your_column']
mask = df2['compare_column'].isin(df1['compare_column'])
dictionary = dict(df2[['compare_column','new_column']][mask].values)
df1['B'] = df1.apply(lambda x: dictionary[x['compare_column']], axis=1)