У меня путаница в отношении фильтрации и извлечения дублированных строк в кадре данных pandas. Например, рассмотрим:
col1 col2 col3 col4 col5 ID
1 yes 0 1 2 201
2 0 1 0 0 203
0 0 0 0 1 202
0 0 0 0 2 202
1 yes 0 3 4 201
Как я могу выбрать и расположить в другом фрейме данных панд все дублированные строки, которые имеют одинаковое связанное ID
, без учета определенного количества столбцов, давайте для этого примера предположим, что последние 2 столбца (col4
и col5
) ). Например, скажем, у меня есть (*)
:
col1 col2 col3 col4 col5 ID
1 yes 0 1 2 201
1 yes 0 3 4 201
0 0 0 0 1 202
0 0 0 0 2 202
2 0 1 0 0 203
Я знаю, что могу использовать для этого встроенные функции дубликаты и groupby . Тем не менее, так как я имею дело с большим количеством столбцов и строк, я не знаю, вернется ли это ко всем дублированным строкам, организованным так, как я хочу. Я пытался:
В:
temp2 = ['col4','col5']
# I am doing this because I have a lot of columns in my real dataset more than 800
a_lis = list(set(df.columns) - set(temp2))
a_lis
df.groupby(df['ID']).loc[df.duplicated(keep=False, subset=a_lis),:]
из
AttributeError: Cannot access callable attribute 'loc' of 'DataFrameGroupBy' objects, try using the 'apply' method
Моя путаница связана с параметром keep
, я вообще не понимаю, как работает этот параметр. Таким образом, мой вопрос заключается в том, как правильно использовать groupby и параметр keep для получения (*)