【问题标题】:Collapse overlapping coloums in pandas dataframe [duplicate]折叠熊猫数据框中的重叠列[重复]
【发布时间】:2021-08-02 08:23:47
【问题描述】:

我有一个如下所示的数据框:

>>> df = pd.DataFrame({'P1':['ARF5','NaN','NaN'],'P2':['NaN','M6PR','NaN'],'P3':['NaN','NaN','NDUFAF7']})
>>> df
     P1    P2       P3
0  ARF5   NaN      NaN
1   NaN  M6PR      NaN
2   NaN   NaN  NDUFAF7

我一直在尝试将其折叠成这样:

     C1
0  ARF5  
1  M6PR
2  NDUFAF7

所有列都有重叠,但我不知道程度。此外,我不知道在任何迭代中此 df 中有多少列,因为它是我需要从中聚合输出的管道的一部分。

我认为原则上我需要combine_first 的功能,但对于列。 我尝试过这样的事情:

df['condensed'] = reduce(lambda x,y:x.combine_first(y),[df[:]])

df['condensed'] = reduce(lambda x,y:x.combine_first(y),[df['P1'],df['P2'],df['P3']])

但我在解决这个问题时遇到了一些问题。 感谢您的帮助!

【问题讨论】:

  • 使用bfill1 and ffill`,通常比combine_first 快:df.replace({"NaN": np.nan}).bfill(axis=1).ffill(axis=1).iloc[:, 0]
  • @sammywemmy 请不要以 cmets 的身份发布答案
  • 如果您认为问题被错误地关闭,请随时发表评论。

标签: python pandas merging-data


【解决方案1】:

axis=1 上使用bfill

df['C1'] = df.replace('NaN', np.nan).bfill(axis=1)['P1']
>>> df

     P1    P2       P3       C1
0  ARF5   NaN      NaN     ARF5
1   NaN  M6PR      NaN     M6PR
2   NaN   NaN  NDUFAF7  NDUFAF7

【讨论】:

    猜你喜欢
    • 2021-10-17
    • 2021-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-15
    • 2021-09-13
    • 2016-09-02
    • 1970-01-01
    相关资源
    最近更新 更多