Сравните два фрейма данных (Source Vs Target) и оставьте пустую строку, если записи не найдены в таблице Target (с тем же номером индекса, что и у источника) - PullRequest
0 голосов
/ 13 июня 2019

Хотите сравнить данные, представленные в dfs "source", с номером "Index" против dfs "Target", и если искомый индекс не найден в целевой dfs..blank, строка должна быть напечатана в целевой таблице с тем же ключом индекса, который указан в источнике. Есть ли другой способ достичь без цикла, потому что мне нужно сравнить набор данных из 500 000 записей.

Ниже приведены исходные и целевые и ожидаемые кадры данных. Исходные данные имеют запись для номера индекса = 3, где в качестве цели не было записи с номером индекса = 3.

Я хотел напечатать пустую строку с тем же индексным номером, что и у источника.

Источник:

Index   Employee ID Employee Name   Age     City    Country
1   5678    John    30  New york    USA
2   5679    Sam 35  New york    USA
3   5680    Johy    25  New york    USA
4   5681    Rose    70  New york    USA
5   5682    Tom 28  New york    USA
6   5683    Nick    49  New york    USA
7   5684    Ricky   20  Syney   Australia

Цель:

Index   Employee ID Employee Name   Age     City    Country
1   5678    John    30  New york    USA
2   5679    Sam 35  New york    USA
4   5681    Rose    70  New york    USA
5   5682    Tom 28  New york    USA
6   5683    Nick    49  New york    USA
7   5684    Ricky   20  Syney   Australia

Ожидаемое:

Index   Employee ID Employee Name   Age     City    Country
1   5678    John    30  New york    USA
2   5679    Sam 35  New york    USA
3                   
4   5681    Rose    70  New york    USA
5   5682    Tom 28  New york    USA
6   5683    Nick    49  New york    USA
7   5684    Ricky   20  Syney   Australia

Пожалуйста, предложите, если есть какой-либо способ сделать это без зацикливания, поскольку мне нужно сравнить набор данных из 500 000 записей.

Ответы [ 2 ]

1 голос
/ 13 июня 2019

Вы можете reindex и fillna() с пробелом '':

Target.reindex(Source.index).fillna('')

Или:

Target.reindex(Source.index,fill_value='')

Если Index является столбцом, а не индексом, установите его в качестве индекса:

Source=Source.set_index('Index')
Target=Target.set_index('Index')
0 голосов
/ 13 июня 2019

Не лучшим образом, я предпочитаю способ @ anky_91:

>>> df = pd.concat([source, target]).drop_duplicates(keep='first')
>>> df.loc[~df['Index'].isin(source['Index']) | ~df['Index'].isin(target['Index']), df.columns.drop('Index')] = ''
>>> df
   Index Employee ID Employee Name       Age      City    Country
0      1        5678          John        30  New york        USA
1      2        5679        Sam 35  New york       USA       None
2      3                                                         
3      4        5681          Rose        70  New york        USA
4      5        5682        Tom 28  New york       USA       None
5      6        5683          Nick        49  New york        USA
6      7        5684         Ricky        20     Syney  Australia
>>> 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...