1

当第 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

4

1 回答 1

1

使用DataFrame.minwith 选择两个列作为子集[]或与 类似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
于 2018-09-04T13:41:13.227 回答