Панды - Выполнение левого соединения через 2 Датафрейма в Пандах - PullRequest
0 голосов
/ 03 января 2019

У меня есть два кадра данных (один со списком всех дней в месяце, а другой - без дней, когда сотрудники отмечали посещаемость), и я пытаюсь выполнить левое объединение, чтобы у меня был новый Датафрейм со всеми датами ис датами, когда работник делал и не отмечал посещаемость.

Ниже приведено, как df1:

days
01-01-2018
02-01-2018
03-01-2018
04-01-2018
05-01-2018
06-01-2018
07-01-2018

Ниже приводится, как df2:

date, emp_id
01-01-2018,101
03-01-2018,101
04-01-2018,101
06-01-2018,101

Я пытаюсь создать новый Dataframe, как показано ниже:

date,marked,emp_id
01-01-2018,01-01-2018,101
02-01-2018,02-01-2018,101
03-01-2018,03-01-2018,101
04-01-2018,04-01-2018,101
05-01-2018,05-01-2018,101
06-01-2018,06-01-2018,101

Дни, когда значение существует в df2, новый Dataframe должен иметь действительную дату, если дата существует в df1 и df2, иначеэто должно быть нулевым.Я попытался сделать ниже, но я вижу, что он возвращает все даты

new_df = pd.merge(df1, df2,  how='left', left_on=['days'], right_on = ['date'])

1 Ответ

0 голосов
/ 03 января 2019

Вы можете сделать что-то вроде этого:

new_df = pd.merge(df1, df2,  how='outer', left_on=['days'], right_on = ['date'])
new_df = new_df.fillna({'emp_id': 101.0})
print(new_df)

Вывод

        days       date  emp_id
0 2018-01-01 2018-01-01   101.0
1 2018-01-02        NaT   101.0
2 2018-01-03 2018-01-03   101.0
3 2018-01-04 2018-01-04   101.0
4 2018-01-05        NaT   101.0
5 2018-01-06 2018-01-06   101.0
6 2018-01-07        NaT   101.0

Если вы хотите что-то вроде столбца индикатора, сделайте это вместо:

new_df = pd.merge(df1, df2,  how='outer', left_on=['days'], right_on = ['date']).fillna({'emp_id': 101.0})
new_df['marked'] = (new_df.days == new_df.date).astype(np.uint8)
new_df = new_df.drop('date', axis=1)
print(new_df)

Выход

        days  emp_id  marked
0 2018-01-01   101.0       1
1 2018-01-02   101.0       0
2 2018-01-03   101.0       1
3 2018-01-04   101.0       1
4 2018-01-05   101.0       0
5 2018-01-06   101.0       1
6 2018-01-07   101.0       0
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...