我有两个数据框,每个数据框包含两列美国州和城镇。我想在第一个数据框中创建一个具有布尔值的新列,该值指示在第二个数据框中是否有与其状态配对的城镇。
示例:
df = pd.DataFrame({'countries':['france', 'germany', 'spain', 'uk', 'norway', 'italy'],
'capitals':['paris', 'berlin', 'madrid', 'london', 'oslo', 'rome']})
df2 = pd.DataFrame({'countries':['france', 'spain', 'uk', 'italy'],
'capitals':['paris', 'madrid', 'london', 'rome']})
df
countries capitals
0 france paris
1 germany berlin
2 spain madrid
3 uk london
4 norway oslo
5 italy rome
df2
countries capitals
0 france paris
1 spain madrid
2 uk london
3 italy rome
我想做的是
df> countries capitals bool
france paris True
germany berlin False
spain madrid True
uk london True
norway oslo False
italy rome True
谢谢!
答案 0 :(得分:3)
使用指示器执行“完全外部联接”。
u = df.merge(df2, how='outer', indicator='bool')
u['bool'] = u['bool'] == 'both'
u
countries capitals bool
0 france paris True
1 germany berlin False
2 spain madrid True
3 uk london True
4 norway oslo False
5 italy rome True
在中间步骤中,我们看到
df.merge(df2, how='outer', indicator='bool')
countries capitals bool
0 france paris both
1 germany berlin left_only
2 spain madrid both
3 uk london both
4 norway oslo left_only
5 italy rome both
indicator
指定该行所在的位置。现在,我们要标记“布尔”显示为“两个”的所有行(以获取预期的输出)。
答案 1 :(得分:-1)
df = pd.DataFrame({'countries':['france', 'germany', 'spain', 'uk', 'norway', 'italy'],
'capitals':['paris', 'berlin', 'madrid', 'london', 'oslo', 'rome']})
df2 = pd.DataFrame({'countries':['france', 'spain', 'uk', 'italy'],
'capitals':['paris', 'madrid', 'london', 'rome']})
df['bool'] = False
# Loop efficiently through pandas data frame
for idx, row in df.iterrows():
if row.countries in df2.countries.values:
df.loc[idx, 'bool'] = True
print(df)
countries capitals bool
0 france paris True
1 germany berlin False
2 spain madrid True
3 uk london True
4 norway oslo False
5 italy rome True