Объедините две метки времени в Dataframe на основе поля идентификатора - PullRequest
0 голосов
/ 28 февраля 2019

Я пытаюсь выяснить, каким образом я могу объединить два dfs в pandas / python в один на основе нескольких факторов.

  1. Существует поле id, которое существует в обоих dfs
  2. У каждого df есть метка времени, df_1 может иметь одну или несколько меток времени, связанных с идентификатором.
  3. df_2 имеет только одну метку времени, связанную с идентификатором.
  4. df_2 метка времени всегда будетсамая ранняя или первая временная метка по сравнению с временными метками в df_1

Я хочу объединить оба фрейма данных, где временная метка df_2 является первой временной меткой в ​​столбце, а каждая последующая временная метка из df_1 указывается после.

так что результат будет выглядеть примерно так:

I.D                  |            Timestamp
E4242                            earliest_timestamp from df_2
E4242                            next_timestamp from df_1
E4242                            next_timestamp from df_1

Спасибо за поиск!

1 Ответ

0 голосов
/ 28 февраля 2019

Если всегда верно, что df2 содержит только одну дату для каждого идентификатора, и эта дата всегда является самой ранней датой для этого идентификатора, не могли бы вы просто объединить df1 и df2, а затем отсортировать по ID и метке времени?Например:

# Generate example data
df1 = pd.DataFrame({'id': [1, 1, 2, 3, 3, 3], 
                    'timestamp': pd.to_datetime(['2019-01-01', 
                                                 '2019-01-02', 
                                                 '2019-01-15', 
                                                 '2019-01-17', 
                                                 '2019-02-01', 
                                                 '2019-02-03'])})
df2 = pd.DataFrame({'id': [1, 2, 3], 
                    'timestamp': pd.to_datetime(['1959-06-01', 
                                                 '1989-12-01', 
                                                 '1999-01-25'])})

df = pd.concat([df1, df2])
df = df.sort_values(by=['id', 'timestamp']).reset_index(drop=True)
df

   id  timestamp
0   1 1959-06-01
1   1 2019-01-01
2   1 2019-01-02
3   2 1989-12-01
4   2 2019-01-15
5   3 1999-01-25
6   3 2019-01-17
7   3 2019-02-01
8   3 2019-02-03
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...