【问题标题】:Conditional minimum of two columns with NA's具有 NA 的条件最少的两列
【发布时间】:2019-02-09 13:38:55
【问题描述】:

当第 1 列具有特定值时,如何有效地创建一个新列,该列是第 3 列和第 2 列中的最小值?

例子:

my_dataframe=pd.DataFrame({'col1':[1.0,2.0,3.0],
             'col2':[4.0,5.0,6.0],
             'col3':[0.25,np.nan,0.25]})

my_dataframe = my_dataframe.assign(col4 = lambda x: np.where(x['col1']>1, np.minimum(x['col2'], x['col3']), 0))
RuntimeWarning: invalid value encountered in minimum

我假设np.minimumfunction 无法处理 NA,那么我该如何解决这个问题? numpy.nanmin 函数也不能正常工作。

它返回以下错误,因为它没有应用于数组 TypeError: 'Series' object cannot be interpreted as an integer

所以我试着写成如下

my_dataframe = my_dataframe.assign(col4 = lambda x: np.where(x['col1']>1, np.nanmin(x['col2'].values(), x['col3'].values()), 0))

返回错误: TypeError: 'numpy.ndarray' object is not callable

【问题讨论】:

    标签: python pandas numpy na minimum


    【解决方案1】:

    使用DataFrame.min 选择两列以通过[] 或与np.nanmin 类似:

    f = lambda x: np.where(x['col1']>1, x[['col2', 'col3']].min(axis=1), 0)
    #another solution
    #f = lambda x: np.where(x['col1']>1, np.nanmin(x[['col2', 'col3']].values,axis=1), 0)
    my_dataframe = my_dataframe.assign(col4 = f)
    print (my_dataframe)
       col1  col2  col3  col4
    0   1.0   4.0  0.25  0.00
    1   2.0   5.0   NaN  5.00
    2   3.0   6.0  0.25  0.25
    

    【讨论】:

    • 当然,我试过f = lambda x: np.where(x['col1']>1, (x['col2'], x['col3']).min(axis=1), 0) 这显然不起作用...
    • @Michael - 是的,这里有必要使用二维数组或DataFrame
    猜你喜欢
    • 1970-01-01
    • 2021-06-08
    • 1970-01-01
    • 2022-01-07
    • 2020-03-19
    • 1970-01-01
    • 2021-08-25
    • 2021-11-24
    • 2019-09-13
    相关资源
    最近更新 更多