在比较数据帧的一列与整数时,如何使用np.nanmin?

2024-09-28 03:17:58 发布

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

import pandas as pd
import numpy as np
a = np.array([[1, 2], [3, np.nan]])
np.nanmin(a, axis=0)
array([1.,  2.])

我想使用相同的逻辑,但在数据帧列上,并将列的每个值与整数进行比较

用例:

MC_cond = df['MODEL'].isin(["MC"])
df_lgd_type = df['LGD_TYPE'].isin(["FIXED"])
df_without_lgd_type = ~(df_lgd_type)

x = np.nanmin((1,df.loc[MC_cond & df_without_lgd_type,'A'] + df.loc[MC_cond & 
    df_without_lgd_type,'B']))

将A列和B列之和与1进行比较


Tags: importpandasdfastypenpmcarray
1条回答
网友
1楼 · 发布于 2024-09-28 03:17:58

即使没有np.nanmin,这也应该可以做到。我希望我已经从你的稀疏描述中正确地理解了一切

我假设您还希望替换求和后剩余的NaN值。所以我们用1填充这些值,然后在1处将所有值剪裁为max

a = df.loc[MC_cond & df_without_lgd_type, 'A']
b = df.loc[MC_cond & df_without_lgd_type, 'B']
x = (a + b).fillna(1).clip(upper=1)

例如:

df = pd.DataFrame({
    'A': [-1, np.nan, 2, 3, 4], 
    'B': [-4, 5, np.nan, 7, -8]
})

(df.A + df.B).fillna(1).clip(upper=1)

# Output:
# 0   -5.0
# 1    1.0
# 2    1.0
# 3    1.0
# 4   -4.0
# dtype: float64

如果您不希望一列中的NaN值导致行和也为NaN,只需在以下之前填充它们:

x = (a.fillna(0) + b.fillna(0)).fillna(1).clip(upper=1)

为了完整起见,这将是一个与您的方法类似的纯numpy解决方案:

a = df.loc[MC_cond & df_without_lgd_type, 'A'].to_numpy()
b = df.loc[MC_cond & df_without_lgd_type, 'B'].to_numpy()

# optionally fill NaNs with 0
# a = np.nan_to_num(a)
# b = np.nan_to_num(b)

s = a + b
x = np.nanmin(np.stack(s, np.ones_like(s))), axis=0)

相关问题 更多 >

    热门问题