Идея дедуплицируется парами по новому столбцу, созданному GroupBy.cumcount
:
print (df2)
City Date Data2
0 LA 2020-01-01 2.5
1 LA 2020-01-02 1.0 <- duplicates
2 LA 2020-01-02 7.0 <- duplicates
3 NY 2020-01-01 6.5
df1 = (df1.assign(g = df1.groupby(['City','Date']).cumcount())
.set_index(['City','Date','g']))
df2 = (df2.assign(g = df2.groupby(['City','Date']).cumcount())
.set_index(['City','Date','g']))
df = pd.concat([df1, df2], axis = 1)
print (df)
Data1 Data2
City Date g
LA 2020-01-01 0 20.0 2.5
2020-01-02 0 30.0 1.0
1 NaN 7.0
NY 2020-01-01 0 50.0 6.5
При необходимости удалить уровень помощника g
:
df = pd.concat([df1, df2], axis = 1).reset_index(level=2, drop=True)
print (df)
Data1 Data2
City Date
LA 2020-01-01 20.0 2.5
2020-01-02 30.0 1.0
2020-01-02 NaN 7.0
NY 2020-01-01 50.0 6.5
РЕДАКТИРОВАТЬ : Я думаю, что здесь необходимо преобразовать оба столбца в DataFrame, а затем использовать внутреннее объединение с DataFrame.merge
:
df1['Date'] = pd.to_datetime(df1['Date'])
df2['Date'] = pd.to_datetime(df2['Date'])
df = df1.merge(df2, on=['City','Date'])
print (df)
City Date Data1 Data2
0 LA 2020-01-01 20 2.5
1 LA 2020-01-02 30 1.0
2 NY 2020-01-01 50 6.5