带NA的两列的条件最小值

2024-06-09 05:57:31 发布

您现在位置:Python中文网/ 问答频道 /正文

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


Tags: lambda函数numpydataframemy错误npwhere
1条回答
网友
1楼 · 发布于 2024-06-09 05:57:31

使用^{}选择两列以[]或类似于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

相关问题 更多 >