【问题标题】:How to fill `nan` values from columns of same name within a single dataframe?如何从单个数据框中的同名列中填充“nan”值?
【发布时间】:2021-06-16 01:15:30
【问题描述】:

所以我有如下所示的数据框(我想是连接错误的结果):

Index col_a col_b col_a col_b col_a col_b
First 1 62 NaN NaN NaN NaN
Second NaN NaN 36 52 NaN NaN
Third NaN NaN NaN NaN 25 26

我想压缩它,使相同的列名对齐,每个列只有一列,如下所示:

Index col_a col_b
First 1 62
Second 36 52
Third 25 26

保证对于我使用一对notna() 检查检查的每一行和列组合只有一个非 nan 值。事实上有大量的列和大量的索引。我刚刚发布了一个用于简单问题重现的示例数据框。我尝试查看squeeze(),现在尝试通过拆分和连接来组合它们,但远非理想的解决方案

【问题讨论】:

  • 具有多个同名列的数据框?修复错误的合并并从源头解决。
  • 如果可以的话,我会这样做,但这是我从某些人那里获取数据的方式,我无法控制他们如何导出数据。是的,这很可能是我在开头提到的错误合并/加入的结果

标签: python pandas dataframe


【解决方案1】:

由于最多保证一个非NaN 值,因此沿列轴使用groupby + first

df.groupby(df.columns, axis=1).first()

    Index  col_a  col_b
0   First    1.0   62.0
1  Second   36.0   52.0
2   Third   25.0   26.0

【讨论】:

    【解决方案2】:

    尝试通过Transpose(T)属性、dropna()apply()方法:

    df=df.T.apply(sorted,key=pd.isnull).dropna().T
    

    df的输出:

        Index   col_a   col_b
    0   First   1.0     62.0
    1   Second  36.0    52.0
    2   Third   25.0    26.0
    

    【讨论】:

      猜你喜欢
      • 2021-01-20
      • 1970-01-01
      • 2021-08-11
      • 1970-01-01
      • 2016-01-16
      • 2021-10-27
      • 2020-06-27
      • 2022-01-14
      • 1970-01-01
      相关资源
      最近更新 更多