我有一个问题,我不知道如何解决:假设我有三个不同的 Dataframe :
df1:
| 一个|B| C类|
| - -----|- -----|- -----|
| a1| b1| C1|
| a2| b2| C2|
| A3| b3| C3|
df2:
| B| D| E级|
| - -----|- -----|- -----|
| b1| d1| e1|
| b4| d4| E4|
| NaN| d5| E5|
df3:
| 一个|D| F级|G型|
| - -----|- -----|- -----|- -----|
| A3| d3| F3| G3|
| NaN| d4| f4| g4|
| NaN| d5| f5| G5|
考虑到没有列存在于所有的 Dataframe 中,但是在两个 Dataframe 之间总是至少有一个列是公共的,我希望有一种方法将这些 Dataframe 合并成一个 Dataframe 。我所期望的是这样的:
| 一个|B| C类|D| E级|F级|G型|
| - -----|- -----|- -----|- -----|- -----|- -----|- -----|
| a1| b1| C1| d1| e1| NaN| NaN|
| a2| b2| C2| NaN| NaN| NaN| NaN|
| A3| b3| C3| d3| NaN| F3| G3|
| NaN| b4| NaN| d4| E4| f4| g4|
| NaN| NaN| NaN| d5| E5| f5| G5|
我尝试使用pd.concat,但结果是重复列或将DataFrame的行粘贴到另一个DataFrame的下面,而不是以我期望的方式关联列。
2条答案
按热度按时间iklwldmw1#
可能有更简单的方法,但是:
在关联它们之后,您可以找到在每列中包含匹配值的行的索引。
rows
爆炸前:所以行
2, 6
需要被“组合”,0, 3
等等。一种方法是将它们的索引设置为相同的值并使用
.groupby
例如,将其转换为
{ 2: 2, 6: 2, 0: 0, 3: 0, ... }
然后我们可以
.groupby().first()
来获得每个“组合”行:v2g6jxz62#
你可以这样做:
输出:
详细信息,创建一个函数,定义值代表哪一行,即
set_index
。然后使用df.combine_first
将所有 Dataframe 合并到 Dataframe 索引和列标题上。使用functools.reduce
,您可以合并两个以上的 Dataframe 。