合并两个数据帧后重新排列数据帧

时间:2019-05-18 16:03:06

标签: python pandas

我有两个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

2 个答案:

答案 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函数。由于file2file1的子集,因此不需要合并,因为您想要的只是将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