import pandas as pd
df_all = pd.DataFrame(columns=["uid", "a", "b"], data=[["uid1", 12, 15],
["uid2", 13, 16],
["uid3", 14, 17],
["uid4", 15, 18]])
df_additional_info1 = pd.DataFrame(columns=["uid", "c", "d"], data=[["uid1", 12, 15],
["uid3", 14, 17]])
df_additional_info2 = pd.DataFrame(columns=["uid", "c", "d"], data=[["uid2", 12, 15]])
我需要合并df_all两次,并添加其他信息。首先使用df_additional_info1,然后使用df_additional_info2,依此类推。它们将始终包含已存在行的附加信息,并且仅包含尚未更新的行的附加信息。
当我执行以下操作时:
df_all = df_all.merge(df_additional_info1, how="left", on="uid")
df_all = df_all.merge(df_additional_info2, how="outer", on="uid")
我得到重复的列(_x,_y):
但我需要这个
有什么建议吗?
2条答案
按热度按时间webghufk1#
另一种可能的解决方案:
或者,
解释:
代码首先将
uid
设置为所有DataFrames的索引,以便于合并操作。它使用pd.concat()
沿着列轴连接df_all
和df_additional_info1
,将df_additional_info1
的列附加到df_all
上,并创建一个包含这两个列的DataFrame,并填充NaN
,因为df_additional_info1
中没有的uids
。combine_first()
然后用来自级联 Dataframe 的值替换df_additional_info2
中的任何空值,基本上基于uid
用来自df_all
和df_additional_info1
的数据填充df_additional_info2
的间隙。最后一步reset_index()
将uid
移回常规列并重新建立默认整数索引,生成包含所有可用附加信息的合并DataFrame。输出:
gojuced72#
您可以
.concat
附加信息帧: