【问题标题】:How to return the lowest non nan value for each row if present如果存在,如何为每行返回最低的非 nan 值
【发布时间】:2019-11-29 19:24:59
【问题描述】:

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

        import pandas as pd
        import numpy as np
        data = [[np.nan, np.nan, np.nan], [np.nan, '1987-09-01', np.nan], [np.nan, '1987-09-01', '1988-09-01']]
        df = pd.DataFrame(data, columns = ['1', '2', '3'])

我的目标如下:

  • 对于第一行,我想返回 nan 值
  • 对于第二行,我想返回 日期
  • 对于第三行,我想返回 最早的日期 ('1987-09-01') 并返回包含两个的行的 index值(在本例中为 2)

第一次尝试

       df.stack().groupby(level = 0).first() 

但这会导致只返回每行遇到的第一个日期,并删除完整的 nan 行。

提前感谢您的帮助。如果有任何问题,请告诉我!

【问题讨论】:

  • 使用 dropna=false 时使用堆栈 df.stack(dropna=False).groupby(level = 0).first() ,这不会删除完整的 nan 行,但是,它无法找到最小日期,因为日期是字符串。

标签: python pandas


【解决方案1】:

将列转换为日期时间并通过min获取每行最旧的日期:

s = df.apply(pd.to_datetime).min(axis=1)
print (s)
0          NaT
1   1987-09-01
2   1987-09-01
dtype: datetime64[ns]

【讨论】:

  • 看答案我觉得我不知道 min 是如何精确工作的
猜你喜欢
  • 2023-03-17
  • 1970-01-01
  • 2021-04-29
  • 1970-01-01
  • 2016-10-26
  • 2015-07-15
  • 2019-12-06
  • 1970-01-01
  • 2019-02-15
相关资源
最近更新 更多