我是熊猫的新手,我想合并两个数据框,但是我不确定如何正确地做到这一点。所以我有两个数据帧df和df1,其中df1是df的子集。我对df1执行了不同的操作,并且有新的列,我想将其合并回df。
df
Index col1 col2 col3
1 a 1234 5a
2 b 3456 c4
3 c 3613 9y
4 d 9103 0l
5 e 8133 9m
6 f 6790 7h
df1
Index col1 col2 col3
3 c 3613 9y
5 e 8133 9m
6 f 6790 7h
我先从df和df1开始,然后对df1进行操作,结果是:
df1
Index col1 col2 col3 col4 col5
3 c 3613 9y qwrt hkjg
5 e 8133 9m asdf jgnm
6 f 6790 7h asdf sajf
所以我现在的问题是我如何基于col1将df1合并回df,以提供类似的信息(基本上将nans添加到不属于df1的列中,并保留原始数据帧df的顺序)
Index col1 col2 col3 col4 col5
1 a 1234 5a nan nan
2 b 3456 c4 nan nan
3 c 3613 9y qwrt hkjg
4 d 9103 0l nan nan
5 e 8133 9m asdf jgnm
6 f 6790 7h asdf sajf
答案 0 :(得分:2)
IIUC,您需要这个
df.merge(df1, how='outer')
输出
index col1 col2 col3 col4 col5
0 1 a 1234 5a NaN NaN
1 2 b 3456 c4 NaN NaN
2 3 c 3613 9y qwrt hkjg
3 4 d 9103 0l NaN NaN
4 5 e 8133 9m asdf jgnm
5 6 f 6790 7h asdf sajf
答案 1 :(得分:0)
这就是您需要做的!!
pd.concat([df,df1], axis=0, ignore_index=True)
答案 2 :(得分:0)
您可以执行此操作,其中“ col4”和“ col5”是在操作后添加的列
df = pd.DataFrame([('1', 'a', '1234', '5a'), ('2', 'b', '3456', 'c4'), ('3', 'c', '3613', '9y'), ('4', 'd', '9103', '0l'), ('5', 'e', '8133', '9m'), ('6', 'f', '6790', '7h')], columns=('Index', 'col1', 'col2', 'col3'))
df1 = pd.DataFrame([('3', 'c', '3613', '9y', 'qwrt', 'hkjg'), ('5', 'e', '8133', '9m', 'asdf', 'jgnm'), ('6', 'f', '6790', '7h', 'asdf', 'sajf')], columns=('Index', 'col1', 'col2', 'col3', 'col4', 'col5'))
df = df.set_index("Index")
df1 = df1.set_index("Index")
pd.concat([df,df1[["col4", "col5"]]], axis=1, sort=False)
如果您还想将col1和col2的值从df1更新为df2,请使用
df.update(df1)
pd.concat([df,df1[["col4", "col5"]]], axis=1, sort=False)
答案 3 :(得分:0)
如果您使用数据框的子集,则无需合并:
df = pd.DataFrame(np.random.randint(10, size=(4, 2)), columns=list('AB'))
print(df)
输出:
A B
0 5 0
1 7 7
2 7 4
3 8 4
您可以loc
子集并添加新列:
df['C'] = df.loc[1:2, 'B'] + 1
print(df)
输出:
A B C
0 5 0 NaN
1 7 7 8.0
2 7 4 5.0
3 8 4 NaN