Неправильное слияние разных по длине DataFrame
При попытки слияния двух DataFrame получается неправильно заполненный df3:
df1 = pd.read_csv('140101_200524.csv')
df1.columns = ['Date', 'Time', 'X+100']
df1['Data'] = pd.to_datetime(df1['Date'].astype(str))
del df1['Date']
df1['Data'] = pd.to_datetime(df1['Data'], format='%Y-%m-%d') \
.dt.strftime('%m/%d/%Y').str.lstrip("0")
df2 = pd.read_csv('l_d.csv')
df2.columns = ['Date', 'Commo']
df2['Data'] = pd.to_datetime(df2['Date'].astype(str))
del df2['Date']
df2['Data'] = pd.to_datetime(df2['Data'], format='%Y-%m-%d') \
.dt.strftime('%m/%d/%Y').str.lstrip("0")
df3 = df2.merge(df1, on="Data")
df3
Итог, который зависит от воли случая и длинны первого df. По сути получается слияние как попало.
Нужно получить df1 во столько же строк как он и был и к нему добавить df2, который меньше значительно.
Ответы (1 шт):
Нужно получить df1 во столько же строк как он и был и к нему добавить df2 который меньше значительно.
В реляционной алгебре это называется LEFT OUTER JOIN - это когда мы берем все записи из первой (левой) таблицы и те записи из правой таблицы, для которых нашлись совпадения по ключу.
В Pandas для этого используют параметр how, который по умолчанию равен inner, что эквивалентно INNER JOIN.
В вашем случае:
df3 = df1.merge(df2, on="Data", how="left")
или:
df3 = df2.merge(df1, on="Data", how="right")