Dataframe Union 2 по условию - PullRequest
1 голос
/ 26 мая 2019

у меня 2 таблицы.Первый в df:

Date       X1   X2  X3
04.02.2019  2   2   12
05.02.2019  2   2   5
06.02.2019  1   2   1

Второй в df1:

Date       X1   X2  X3
06.02.2019  1   1   2
07.02.2019  1   1   4
08.02.2019  2   2   2
09.02.2019  4   1   1

И мне нужно дополнить таблицу 1 данными из таблицы 2. Данные должны быть взяты из даты, X1, X3столбцы и только для строк с условием Дата> 06.02.2019.Результат в df:

Date       X1   X2  X3
04.02.2019  2   2   12
05.02.2019  2   2   5
06.02.2019  1   2   1
07.02.2019  1       4
08.02.2019  2       2
09.02.2019  4       1

1 Ответ

2 голосов
/ 26 мая 2019

Использование:

#convert columns to datetimes
df['Date'] = pd.to_datetime(df['Date'], format='%d.%m.%Y')
df1['Date'] = pd.to_datetime(df1['Date'], format='%d.%m.%Y')

#filter expected columns by condition and by columns in list
df2 = df1.loc[df1['Date'] > '2019-02-06', ['Date','X1','X3']]

#match by DatetimeIndex and add values from filtered DataFrame
df = df.set_index('Date').combine_first(df2.set_index('Date')).reset_index()
print (df)
        Date   X1   X2    X3
0 2019-02-04  2.0  2.0  12.0
1 2019-02-05  2.0  2.0   5.0
2 2019-02-06  1.0  2.0   1.0
3 2019-02-07  1.0  NaN   4.0
4 2019-02-08  2.0  NaN   2.0
5 2019-02-09  4.0  NaN   1.0

Или, если нужно, только добавить второй DataFrame к первому:

df2 = df1.loc[df1['Date'] > '2019-02-06', ['Date','X1','X3']]
df = pd.concat([df, df2], ignore_index=True, sort=True)
print (df)
        Date  X1   X2  X3
0 2019-02-04   2  2.0  12
1 2019-02-05   2  2.0   5
2 2019-02-06   1  2.0   1
3 2019-02-07   1  NaN   4
4 2019-02-08   2  NaN   2
5 2019-02-09   4  NaN   1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...