如果满足 2 个条件,则将一行 df2 附加到现有的 df 1

Append a row of df2 to existing df 1 if 2 conditions apply

所以我有以下两个数据集:

df1:

index datetime team other conditions
1 2013-4-1 team a 73.3
2 2013-4-1 team b 34.5
3 2014-3-12 team c 57.2

df2:

index datetime home away other conditions
1 2013-4-1 team a team c 73.3
2 2013-4-1 team d team e 73.3
3 2014-3-12 team f team a 348.2

现在我需要按以下方式合并这两个:

对于 df1,找到 df2 中 df1['datetime']==df2['datetime'] 的行 AND df1['team']== df2['home'] 或 df2['away']

然后将 df1 中的行附加到 df 2 中的匹配行

df2 比 df1 大,所以如果所有行都匹配,应该有一个视图剩余的空行,这不是问题。

非常感谢您提供任何有用的提示,否则我必须手动找到超过 4000 行的匹配提示

无需查看更多数据,这将为您提供所需的结果

data = {
        'datetime' : ['2013-4-1', '2013-4-1', '2014-3-12', '2014-4-12'],
        'team' : ['team a', 'team b', 'team c', 'team b'],
        'other conditions' : [73.3, 34.5, 57.2, 384.3]
       }

data2 = {
        'datetime' : ['2013-4-1', '2013-4-1', '2014-3-12', '2014-4-12'],
        'home' : ['team a', 'team d', 'team f', 'team g'],
        'away' : ['team c', 'team e', 'team a', 'team b'],
        'other conditions' : [73.3, 34.5, 57.2, 38.3]
       }


df1 = pd.DataFrame(data)
df2 = pd.DataFrame(data2)

df3 = df2.merge(df1, how='left', on = 'datetime', suffixes = ('','_y'))
comp_column = np.where((df3['team'] == df3['home']) | (df3['team'] == df3['away']), True, False)
df3['check'] = comp_column
df3 = df3.loc[df3['check'] == True]
df3.drop((['other conditions_y', 'check']), axis = 1, inplace = True)
df3

这将在日期时间将您的 df1 和 df2 连接在一起,这可能会造成一些错误的连接,但如果您只是在寻找团队在主场还是外场的位置,底部的 np.where 将解决此问题给你。

df1['home']=df1['team']
df1['away']=df1['team']

dfhome = df1.merge(df2, on=['datex', 'home'], how='inner')
dfaway = df1.merge(df2, on=['datex', 'away'], how='inner')

然后将 dfhome 和 dfaway 放在一起。