我有两个CSV文件-file1,file2。 File2是file1的子集。我想合并file1中file2的内容,并将file2的条目放在file1的底部,以便合并后file1中的条目总数保持不变。
这是到目前为止我尝试过的方法,但是基本上是在file1的底部添加了file2的条目,从而增加了file1中的条目数量。
data1 = pd.read_csv('file1.csv')
data2 = pd.read_csv('file2.csv')
data1 = data1.set_index('entry_id')
data2 = data2.set_index('entry_id')
new = pd.concat([data1,data2])
new = pd.merge(data1,data2, on=['entry_id'])
new = data1 + data2
new = new.drop(['columnC','columnD'],axis =1)
new
答案 0 :(得分:0)
尝试data1.update(data2)
。
联接位于索引上,更新位于上。
将来的问题包括源数据帧的样本数据和预期结果。
如果要从中获得第一行“原始”(未更新)行 data1 和在它们之后来自 data2 的更新行, 然后采取不同的方法:
从在 data2 中存在 entry_id 的 data1 行中删除开始 (将其移至结果的末尾):
data1.drop(index=data2.index, inplace=True)
然后仅添加 data2 中的行:
new = pd.concat([data1,data2])
如果您想保持 data1 不变,则可以进行整个处理 带有单说明:
new = pd.concat([data1.drop(index=data2.index), data2])
答案 1 :(得分:0)
我猜想merge
不是您想要的,而是reindex
函数。由于file2
是file1
的子集,因此不需要合并,因为您想要的只是将file2
放在file1
的底部。 reindex
可以帮助您重新排列行/列。
这是一个简单的例子:
d1=pd.DataFrame({'id':[1,2,3,4,5],'type':[7,8,9,0,1]})
d2=d1[2:4]
d2.index=range(d2.shape[0])
dex1=list(d1[~d1.id.isin(d2.id)].index)
dex2=list(d1[d1.id.isin(d2.id)].index)
d1.reindex(dex1+dex2)
d1
是:
d1
Out[51]:
id type
0 1 7
1 2 8
2 3 9
3 4 0
4 5 1
d2
是:
d2
Out[50]:
id type
0 3 9
1 4 0
结果是:
Out[52]:
id type
0 1 7
1 2 8
4 5 1
2 3 9
3 4 0