要比较dfs“源”中存在的数据与“索引”号 针对dfs“目标”,如果在目标dfs中找不到搜索到的索引,则必须使用与源中给定的相同索引键在目标表中打印空白行。还有其他没有循环的方法,因为我需要比较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条记录的数据集。
答案 0 :(得分:1)
Target.reindex(Source.index).fillna('')
或者:
Target.reindex(Source.index,fill_value='')
如果Index
是一列而不是实际上不是索引,请将其设置为索引:
Source=Source.set_index('Index')
Target=Target.set_index('Index')
答案 1 :(得分:0)
不是最好的方法,我更喜欢@ 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
>>>