带有NA的两列的条件最小值

时间:2018-09-04 13:39:12

标签: python pandas numpy na minimum

当第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.minimum函数无法处理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

1 个答案:

答案 0 :(得分: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