我有两个看起来像下面这样的 Pandas 数据框:
df1:
RecorderID GroupID Location ... SomeColumn
CT-1000001 BV- Cape Town SomeValue
CT-1000002 MP- Johannesburg SomeValue
CT-1000003 BV- Durban SomeValue
df2:
RecorderID GroupID Location ... SomeColumn
CT-1000001 BV- Durban ... SomeValue
CT-1000003 BV- Durban ... SomeValue
这两个数据框实际上很大,有很多列和很多行。我想比较两个数据帧并以一个数据帧结束(RecorderID 是我的主键):
因此,以上面的示例为例,我最终会得到以下数据框:
RecorderID GroupID Location ... SomeColumn
CT-1000001 BV- Cape Town SomeValue
CT-1000002 MP- Johannesburg SomeValue
PS:我注意到在将数据框写入 Excel 时,它会插入一个索引列作为第一列。如何指定 RecorderID 是我的主键并且它应该使用它来索引值?我试过了:
df = read_excel('file.xlsx', 'sheet1', index_col='RecorderID')
但这只是删除了 RecorderID 列并在我将其写出到 excel 时添加了一个编号的索引列。
谢谢!
最佳答案
如果您正在运行最新版本的 pandas,那么您可以 merge
并指定合并方法为left
, 另外我们可以设置 indicator=True
这会增加一列 _merge
你会告诉 left_only
中是否存在这些行或 both
,然后我们可以过滤掉这些行:
In [91]:
merged = pd.merge(df1,df2,indicator=True, how='left' )
merged
Out[91]:
RecorderID GroupID Location SomeColumn _merge
0 CT-1000001 BV- Cape Town SomeValue left_only
1 CT-1000002 MP- Johannesburg SomeValue left_only
2 CT-1000003 BV- Durban SomeValue both
In [92]:
merged[merged['_merge'] == 'left_only']
Out[92]:
RecorderID GroupID Location SomeColumn _merge
0 CT-1000001 BV- Cape Town SomeValue left_only
1 CT-1000002 MP- Johannesburg SomeValue left_only
关于excel - 将一个数据框与另一个数据框重叠并仅保留新的或更改的行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35011551/