虽然这个问题看起来和之前的问题很相似,但我不能用之前的答案来解决它,我需要专家的帮助。
我正在尝试用从不同数据帧(df2)接收的数据更新现有数据帧(df1)到新的数据帧(df)。数据帧df2可以具有新列、新行或新/空白数据。下面是我想要实现的一个例子。
df1 = pd.DataFrame(np.array([[1, 'A1', 'B1'], [2, 'A2', 'B2'], [3, 'A3', 'B3']]), columns=['ID', 'A', 'B'])
df1
ID A B
0 1 A1 B1
1 2 A2 B2
2 3 A3 B3
df2 = pd.DataFrame(np.array([[1, 'A1X', 'B1X'], [2, 'A2X', ''], [4, 'A4', 'B4']]), columns=['ID', 'A', 'B'])
df2
ID A B
0 1 A1X B1X
1 2 A2X NaN
2 4 A4 B4所需的输出为:
df
ID A B
0 1 A1X B1X
1 2 A2X B2
2 3 A3 B3
3 4 A4 B4你能帮帮我吗?
熊猫新手用户
发布于 2021-08-24 19:20:20
尝试:
df1 = pd.DataFrame(np.array([[1, 'A1', 'B1'], [2, 'A2', 'B2'], [3, 'A3', 'B3']]), columns=['ID', 'A', 'B'])
df2 = pd.DataFrame(np.array([[1, 'A1X', 'B1X'], [2, 'A2X', ''], [4, 'A4', 'B4']]), columns=['ID', 'A', 'B'])
df1 = df1.set_index('ID').replace('', np.nan)
df2 = df2.set_index('ID').replace('', np.nan)
df_out = df2.combine_first(df1)
print(df_out)输出:
A B
ID
1 A1X B1X
2 A2X B2
3 A3 B3
4 A4 B4发布于 2021-08-24 19:14:32
使用set_index()和combine_first()为每个数据帧设置索引
此外,根据Scott波士顿的回答,请确保首先使用nan replace空白值。
df2.set_index('ID').combine_first(df1.set_index('ID')).reset_index()
Out[1]:
ID A B
0 1 A1X B1X
1 2 A2X
2 3 A3 B3
3 4 A4 B4https://stackoverflow.com/questions/68912866
复制相似问题