Сравниваем два кадра данных и выводим индекс дублированной строки один раз - PullRequest
1 голос
/ 16 мая 2019

Мне нужна помощь при сравнении двух данных. Например:

Первый кадр данных -

df_1 = 
    0   1   2   3   4   5
0   1   1   1   1   1   1
1   2   2   2   2   2   2
2   3   3   3   3   3   3
3   4   4   4   4   4   4
4   2   2   2   2   2   2
5   5   5   5   5   5   5
6   1   1   1   1   1   1
7   6   6   6   6   6   6

Второй кадр данных -

df_2 = 
    0   1   2   3   4   5
0   1   1   1   1   1   1
1   2   2   2   2   2   2
2   3   3   3   3   3   3
3   4   4   4   4   4   4
4   5   5   5   5   5   5
5   6   6   6   6   6   6

Могу ли я узнать, есть ли способ (без использования цикла for) найти индекс строк df_1, имеющих одинаковые значения строк df_2. В приведенном выше примере мой ожидаемый результат ниже

index = 
0
1
2
3
5
7

Размер столбца переменной «index» выше должен иметь такой же размер столбца, как df_2.

Если одна и та же строка df_2 повторяется в df_1 более одного раза, мне нужен только индекс первого появления, поэтому мне не нужны индексы 4 и 6.

Пожалуйста, помогите. Большое вам спасибо!

Tommy

Ответы [ 2 ]

0 голосов
/ 16 мая 2019

Используйте DataFrame.merge с DataFrame.drop_duplicates и DataFrame.reset_index для преобразования индекса в столбец, чтобы избежать потери значений индекса, последний выбранный столбец называется index:

s = df_2.merge(df_1.drop_duplicates().reset_index())['index']
print (s)
0    0
1    1
2    2
3    3
4    5
5    7
Name: index, dtype: int64

Деталь :

print (df_2.merge(df_1.drop_duplicates().reset_index()))
   0  1  2  3  4  5  index
0  1  1  1  1  1  1      0
1  2  2  2  2  2  2      1
2  3  3  3  3  3  3      2
3  4  4  4  4  4  4      3
4  5  5  5  5  5  5      5
5  6  6  6  6  6  6      7
0 голосов
/ 16 мая 2019
Проверьте решение
df1=pd.DataFrame({'0':[1,2,3,4,2,5,1,6],
                 '1':[1,2,3,4,2,5,1,6],
                '2':[1,2,3,4,2,5,1,6],
                 '3':[1,2,3,4,2,5,1,6],
                 '4':[1,2,3,4,2,5,1,6],
                '5':[1,2,3,4,2,5,1,6]})

df1=pd.DataFrame({'0':[1,2,3,4,5,6],
                 '1':[1,2,3,4,5,66],
                '2':[1,2,3,4,5,6],
                 '3':[1,2,3,4,5,66],
                 '4':[1,2,3,4,5,6],
                '5':[1,2,3,4,5,6]})
df1[df1.isin(df2)].index.values.tolist()

### Output
[0, 1, 2, 3, 4, 5, 6, 7]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...