熊猫合并/更新数据框

时间:2018-07-13 13:11:44

标签: python pandas

我有两个pandas数据帧,例如:

   un  do
76  0   1
32  2   3
12  0   2
56  0   1
78  2   3
6   4   4

    un  do
76  0   5
32  2   3
12  1   2
56  0   1
78  2   3
6   4   4
34  3   3
78  h   3
23  2   -34

因此,它们表示类似以前的数据和实际数据。我需要加入所有不同的行。 我将要自杀,但我无法通过pandas的方式加入他们。

我想获得这样的数据框:

    un  do  chan
76  0   5   changed
76  0   1   None
32  2   3   None
12  1   2   changed
12  0   2   None
56  0   1   None
78  2   3   None
6   4   4   None
34  3   3   None
78  h   3   None
23  2   -34 None

1 个答案:

答案 0 :(得分:5)

您可以使用concat连接两个数据帧,然后连接drop_duplicates

然后使用locduplicated来按索引更新重复的行。

# concatenate, reset index to elevate index to series, drop duplicates
df = pd.concat([df1, df2]).reset_index().drop_duplicates()

# add change series dependent on duplicates by index
df['change'] = np.where(df.duplicated('index'), 'changed', None)

# reset index for desired output
df = df.set_index('index')

print(df)

       un  do   change
index                 
76      0   1     None
32      2   3     None
12      0   2     None
56      0   1     None
78      2   3     None
6       4   4     None
76      0   5  changed
12      1   2  changed
34      3   3     None
78      0   3  changed
23      2 -34     None

请注意,我已将un78的{​​{1}}值更改为确保您拥有数字数据,我假设这是一个错字。否则,建议您选择一个未使用的数字,以确保不还原为df2 dtype。