python - 具有 NA 的两列的条件最小值

标签 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功能不太好用。

它返回以下错误,因为它没有应用于数组 类型错误:“系列”对象无法解释为整数

所以我尝试写成如下

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/

相关文章:

python - python处理大量图片的技巧

python - 从列表中获取数据

python - Pandas DataFrame 中的 latex 公式

numpy: 你如何对 "break"进行 numpy 操作?

python - 如何对特征矩阵进行行归一化?广播错误

python - 从 xml 创建 python 对象表示的模块

python - 按列分组时查找最接近的值

python - 确保 pandas.crosstab 返回方阵

python - Pandas :如果日期时间索引中的日期不同,则将一列的值添加到另一列

python - 在 rdflib 中批量编辑三元组的主题