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

Python 在比较数据帧的一列与整数时,如何使用np.nanmin?,python,pandas,numpy,Python,Pandas,Numpy,我想使用相同的逻辑,但在数据帧列上,并将列的每个值与整数进行比较 用例: import pandas as pd import numpy as np a = np.array([[1, 2], [3, np.nan]]) np.nanmin(a, axis=0) array([1., 2.]) 将A列和B列的总和与1进行比较。即使没有np.nanmin,这也应该可以做到这一点。我希望我已经从你的稀疏描述中正确地理解了一切 我假设您还希望替换求和后剩余的NaN值。因此,我们用1填充这些值,然

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

用例:

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

将A列和B列的总和与1进行比较。

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

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

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 = 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)
如果您不希望一列中的NaN值导致行和也为NaN,只需在以下之前填充它们:

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

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

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

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

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

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 = 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)
如果您不希望一列中的NaN值导致行和也为NaN,只需在以下之前填充它们:

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

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

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

这是一个非常有用的反馈,请原谅我的讽刺。这是一个非常有用的反馈,请原谅我的讽刺。