#python #pandas
Вопрос:
У меня есть 2 кадра данных df_Participants и df_Movements, и я хочу сохранить строки df_Movements
только в том случае, если участник включен df_Participants
.
Df_участники:
id
0 1053.0
1 1052.0
2 1049.0
df_движения
id participant
0 3902 1053
1 3901 1053
611 2763 979
612 2762 979
Ожидаемые результаты:
id participant
0 3902 1053
1 3901 1053
то, что я пробовал до сих пор:
remove_incomplete_submissions = True
if remove_incomplete_submissions:
df_Movements = df_Movements.loc[df_Movements['participant'].isin(df_Participants['id'])]
Когда я проверяю количество уникальных участников, оно не совпадает. Я знаю, что это просто, но я, кажется, не замечаю здесь проблемы.
Комментарии:
1. использование
isin
— хороший способ попасть туда, и то, что вы сделали, кажется правильным. Что вы подразумеваете под тем, что количество уникальных участников не совпадает ?2. @Ben. — Я раньше не видел вашего предложения. Я добавил вас в свой ответ.
3. Я ожидаю 40 уникальных участников, но я продолжаю получать 28 (также я уверен, что есть 40 уникальных участников).
4. Моя ошибка заключалась в том, что я сохранял изменения в исходном CSV-файле каждый раз, когда запускал скрипт. Следовательно, я так и не получил соответствующий номер.
5. @Corralien нет pb, если я не потратил время на написание ответа, но это сделал кто-то другой, то я не могу на самом деле злиться :p но в этом случае ОП уже написал этот метод
isin
в показанном коде. поэтому я был еще больше сбит с толку тем, почему это не сработало в их случае
Ответ №1:
Вы можете использовать слияние:
new_df = df_Participants.merge(df_Movements, how='left', left_on='id', right_on='participant')
Ответ №2:
Используется isin
для создания логической маски и получения строк, соответствующих условию:
>>> df_Movements[df_Movements['participant'].isin(df_Participants['id'])]
id participant
0 3902 1053
1 3901 1053
Редактировать: как и предлагал @Ben.T в комментариях