当第 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功能不太好用。
它返回以下错误,因为它没有应用于数组
类型错误:“系列”对象无法解释为整数
所以我尝试写成如下
my_dataframe = my_dataframe.assign(col4 = lambda x: np.where(x['col1']>1, np.nanmin(x['col2'].values(), x['col3'].values()), 0))
返回错误:
类型错误:“numpy.ndarray”对象不可调用
最佳答案
使用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
关于python - 具有 NA 的两列的条件最小值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52167672/