【问题标题】:Pandas CONCAT() with merged columns in CreationPandas CONCAT() 与 Creation 中的合并列
【发布时间】:2016-11-03 09:11:03
【问题描述】:

我正在尝试创建一个非常大的数据框,由许多较小数据框的一列组成(重命名为数据框名称)。我正在使用 CONCAT() 并遍历表示数据帧的字典值,并遍历索引值,以创建大型数据帧。 CONCAT() join_axes 是所有数据帧的公共索引。这很好用,但是我有重复的列名。
作为我最终数据框创建的一部分,我必须能够在特定窗口上循环索引 - 所以删除这一步不是一个选项

例如,这会导致以下带有重复列的最终数据框:

有什么方法可以像我一样使用 CONCAT(),但合并列以产生像这样的输出?:

【问题讨论】:

  • 你可以做df = pd.concat([df1,df2], axis = 1)
  • 那行不通。我有数百个数据框,并且索引上必须有 join_axis

标签: python pandas concat


【解决方案1】:

我认为你需要:

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

【讨论】:

    【解决方案2】:

    你想要的是df1.combine_first(df2)。参考pandas documentation

    【讨论】:

      猜你喜欢
      • 2018-11-29
      • 2018-07-06
      • 1970-01-01
      • 2017-03-13
      • 2021-03-16
      • 2020-11-30
      • 1970-01-01
      • 2016-11-06
      • 1970-01-01
      相关资源
      最近更新 更多