【问题标题】:Remove NaNs and consolidate remaining values in to one column [duplicate]删除 NaN 并将剩余值合并到一列 [重复]
【发布时间】:2021-11-04 09:20:30
【问题描述】:

我有一个数据框,其中删除了不需要的值并替换为 NaN。我现在想将我的列合并到一个包含有效值的列中

Name    Set_1   Set_2   Set_3
Task1   A       NaN     NaN 
Task2   NaN     B       NaN 
Task3   NaN     NaN     C

我不想删除包含 NaN 的整行,因为它们包含有效值,而是我想删除 NaN 值并合并数据,使其看起来像这样:

Name    Set
Task1   A
Task2   B
Task3   C

我可以在每一列上手动执行此操作,方法是找到具有有效值的列,创建一个新的数据框,然后删除没有值的列:

df2 = df.loc[df['Set_1'] != 'NaN']
df2.drop(columns = ["Set_2", "Set_3"])

然后组合每个新的数据帧,但这在更大的场景中并不实用。我正在寻找一种更有效的方法来执行此操作,因为我的真实数据集有更多列。

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    试试bfill:

    >>> df.bfill(axis=1).dropna(axis=1)
        Name Set_1
    0  Task1     A
    1  Task2     B
    2  Task3     C
    

    【讨论】:

    • 好把戏 ;) +1 df.bfill(axis=1).iloc[:, :2] 不需要 dropna 计算
    【解决方案2】:

    你可以使用melt + groupby/first:

    (df.melt(id_vars='Name', value_name='Set')
       .groupby('Name')
       ['Set'].first()
       .reset_index()
    )
    

    输出:

        Name Set
    0  Task1   A
    1  Task2   B
    2  Task3   C
    

    【讨论】:

      猜你喜欢
      • 2021-09-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-01-01
      • 2021-10-19
      • 1970-01-01
      • 2021-05-04
      相关资源
      最近更新 更多