Pandas CONCAT() 与创建中的合并列
Pandas CONCAT() with merged columns in Creation
我正在尝试创建一个非常大的数据框,它由许多较小数据框的一列组成(重命名为数据框名称)。我正在使用 CONCAT() 并循环遍历表示数据帧的字典值,并循环遍历索引值,以创建大型数据帧。 CONCAT() join_axes 是所有数据帧的公共索引。这工作正常,但是我有重复的列名。
作为最终数据框创建的一部分,我必须能够遍历特定 windows 处的索引 - 因此删除此步骤不是一个选项
例如,这会产生以下具有重复列的最终数据框:
有什么方法可以像我一样直接使用 CONCAT(),但合并列以产生这样的输出吗?:
你要的是df1.combine_first(df2)
。参考pandas documentation.
我认为你需要:
df = pd.concat([df1, df2])
或者如果列中有重复项,请使用 groupby
,如果某些值重叠,则求和:
print (df.groupby(level=0, axis=1).sum())
样本:
df1 = pd.DataFrame({'A':[5,8,7, np.nan],
'B':[1,np.nan,np.nan,9],
'C':[7,3,np.nan,0]})
df2 = pd.DataFrame({'A':[np.nan,np.nan,np.nan,2],
'B':[1,2,np.nan,np.nan],
'C':[np.nan,6,np.nan,3]})
print (df1)
A B C
0 5.0 1.0 7.0
1 8.0 NaN 3.0
2 7.0 NaN NaN
3 NaN 9.0 0.0
print (df2)
A B C
0 NaN 1.0 NaN
1 NaN 2.0 6.0
2 NaN NaN NaN
3 2.0 NaN 3.0
df = pd.concat([df1, df2],axis=1)
print (df)
A B C A B C
0 5.0 1.0 7.0 NaN 1.0 NaN
1 8.0 NaN 3.0 NaN 2.0 6.0
2 7.0 NaN NaN NaN NaN NaN
3 NaN 9.0 0.0 2.0 NaN 3.0
print (df.groupby(level=0, axis=1).sum())
A B C
0 5.0 2.0 7.0
1 8.0 2.0 9.0
2 7.0 NaN NaN
3 2.0 9.0 3.0
我正在尝试创建一个非常大的数据框,它由许多较小数据框的一列组成(重命名为数据框名称)。我正在使用 CONCAT() 并循环遍历表示数据帧的字典值,并循环遍历索引值,以创建大型数据帧。 CONCAT() join_axes 是所有数据帧的公共索引。这工作正常,但是我有重复的列名。
作为最终数据框创建的一部分,我必须能够遍历特定 windows 处的索引 - 因此删除此步骤不是一个选项
例如,这会产生以下具有重复列的最终数据框:
有什么方法可以像我一样直接使用 CONCAT(),但合并列以产生这样的输出吗?:
你要的是df1.combine_first(df2)
。参考pandas documentation.
我认为你需要:
df = pd.concat([df1, df2])
或者如果列中有重复项,请使用 groupby
,如果某些值重叠,则求和:
print (df.groupby(level=0, axis=1).sum())
样本:
df1 = pd.DataFrame({'A':[5,8,7, np.nan],
'B':[1,np.nan,np.nan,9],
'C':[7,3,np.nan,0]})
df2 = pd.DataFrame({'A':[np.nan,np.nan,np.nan,2],
'B':[1,2,np.nan,np.nan],
'C':[np.nan,6,np.nan,3]})
print (df1)
A B C
0 5.0 1.0 7.0
1 8.0 NaN 3.0
2 7.0 NaN NaN
3 NaN 9.0 0.0
print (df2)
A B C
0 NaN 1.0 NaN
1 NaN 2.0 6.0
2 NaN NaN NaN
3 2.0 NaN 3.0
df = pd.concat([df1, df2],axis=1)
print (df)
A B C A B C
0 5.0 1.0 7.0 NaN 1.0 NaN
1 8.0 NaN 3.0 NaN 2.0 6.0
2 7.0 NaN NaN NaN NaN NaN
3 NaN 9.0 0.0 2.0 NaN 3.0
print (df.groupby(level=0, axis=1).sum())
A B C
0 5.0 2.0 7.0
1 8.0 2.0 9.0
2 7.0 NaN NaN
3 2.0 9.0 3.0