如果满足 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 放在一起。
所以我有以下两个数据集:
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 放在一起。