Как получить значение из одного кадра данных, удовлетворяющего определенным условиям, из другого кадра данных? - PullRequest
0 голосов
/ 01 октября 2019

У меня есть два кадра данных:

df1 со столбцами: id | date

и

df2 со столбцами: id| begin_date | end_date | var

Мне нужно добавить var столбец к df1 для условий:

  • df1['id'] == df2['id'] &
  • df2['begin_date'] <= df1['date'] < df2['end_date']
  • , если в строке несколько строкdf2 соответствует указанным выше условиям, поэтому возьмите последнюю строку .

Ожидаемый результат: df1 со столбцами: id | date | var.

Спасибо за советы.

Ответы [ 2 ]

0 голосов
/ 01 октября 2019

Вы можете сделать это за один шаг, но ваши типы данных должны быть согласованы, прежде чем вы начнете сравнивать.

df1['var'] = df1.apply(lambda x: df2.loc[max(df2[(x['id'] == df2['id']) & (df2['begin_date'] == x['date']) & (x['date'] < df2['end_date'])].index), 'var'], axis = 1)
0 голосов
/ 01 октября 2019

насколько я понимаю ваше требование, я думаю, что вы можете сделать это в два этапа.

1.first - объединить два кадра данных по id

merged_data_frame = pd.merge(df1,df2,how="inner",on=["id"],indicator=True)

2. второй шаг

  • преобразование даты и типа begin_date, типов end_date в datetime
  • фильтрация данных по вашему состоянию даты

    merged_data_frame["date"] = pd.to_datetime(merged_data_frame["date"])
    merged_data_frame["begin_date"] = pd.to_datetime(merged_data_frame["begin_date"])
    merged_data_frame["end_date"] = pd.to_datetime(merged_data_frame["end_date"])
    merged_data_frame = merged_data_frame[merged_data_frame.begin_date <= merged_data_frame.date]
    merged_data_frame = merged_data_frame[merged_data_frame.date >  merged_data_frame.end_date]
    out=merged_data_frame.drop_duplicates(subset=["id"], keep='last')
    
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...