我有两个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
答案 0 :(得分:5)
您可以使用concat
连接两个数据帧,然后连接drop_duplicates
。
然后使用loc
和duplicated
来按索引更新重复的行。
# 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
请注意,我已将un
中78
的{{1}}值更改为确保您拥有数字数据,我假设这是一个错字。否则,建议您选择一个未使用的数字,以确保不还原为df2
dtype。