#python #pandas #dataframe
Вопрос:
У меня есть 2 кадра данных, в каждом из которых несколько столбцов. Оба кадра данных содержат столбцы «SendID» и «SendDateTime» в качестве единственных одинаковых столбцов. Оба кадра данных имеют полностью заполненный «SendID». В Df1 отсутствует 30 000 «SendDateTime». В Df2 заполнены все «SendID» и «SendDateTime». Я хочу получить отсутствующее «SendDateTime» в df1 из df2 с помощью «SendID». Оба кадра данных имеют несколько столбцов, которые не совпадают.
df1 (7 столбцов)
SendID SendDateTime Link
12345 10/12/2019 8:00:00 AM Text Box
12345 10/12/2019 8:00:00 AM View Browser
98765 News
98765 Social
45678 12/24/2019 11:00:00 AM Shop
45678 12/24/2019 11:00:00 AM Button
df2 (8 столбцов)
SendID SendDateTime Subject
12345 10/12/2019 8:00:00 AM Hello
98765 11/19/2019 9:30:00 AM Welcome
45678 12/24/2019 11:00:00 AM Please Read
Желаемый вывод в df1 (те же 7 столбцов), поэтому все отсутствующие «SendDateTime» заполняются с помощью «SendID» в df2:
SendID SendDateTime Link
12345 10/12/2019 8:00:00 AM Text Box
12345 10/12/2019 8:00:00 AM View Browser
98765 11/19/2019 9:30:00 AM News
98765 11/19/2019 9:30:00 AM Social
45678 12/24/2019 11:00:00 AM Shop
45678 12/24/2019 11:00:00 AM Button
Я пытался:
miss = df1[df1['SendDateTime'].isnull()]
nonmiss = df1[df1['SendDateTime'].notnull()]
miss = miss.merge(df2, how='left', on='SendID')
df1 = nonmiss.append(miss)
Я также пытался:
df1.update(df2)
print(df1)
Как я могу сделать это правильно?
Ответ №1:
Вы можете получить отдельный идентификатор/время из df2, а затем объединить их в df1 после удаления столбца времени.
df2_t = df2[['SendID','SendDateTime']].drop_duplicates()
df1.drop(columns='SendDateTime').merge(df2_t, on='SendID')
Выход
SendID Link SendDateTime
0 12345 Text Box 10/12/2019 8:00:00 AM
1 12345 View Browser 10/12/2019 8:00:00 AM
2 98765 News 11/19/2019 9:30:00 AM
3 98765 Social 11/19/2019 9:30:00 AM
4 45678 Shop 12/24/2019 11:00:00 AM
5 45678 Button 12/24/2019 11:00:00 AM