获取两列之间的最小值,并在两列不为null时赋值

2024-06-16 09:57:44 发布

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

我试图找出如果两列都不为null,如何在两列之间分配最小值。 因此,给定一个包含以下数据的数据帧,将其填充在一行中:

col1    col2    col3
347     933     338
938     523     211

我试图将一个temp列指定给col2和col3之间的最小值,但下面给出了一个错误:

df.loc[df['col2'].notnull() & df['col3'].notnull(), 'TEMP_rank'] = min(df.loc[['col2'], df['col3']]).min().min()

我也有以下问题:

df.loc[df['col2'].notnull() & df['col3'].notnull(), 'TEMP_rank'] = min(df.loc[['col2'], df['col3']]).min(1)

我将寻找以下输出(在第2列和第3列之间进行测试):

col1    col2    col3    tempCol
347     933     338     338
938     123     211     123

Tags: 数据df错误minnulltemploccol2
1条回答
网友
1楼 · 发布于 2024-06-16 09:57:44

如果您只想在两个值都不为null/NaN时计算min(),则可以这样做

df = pd.read_csv(io.StringIO("""col1    col2    col3
347     933     338
500     NaN     200
938     523     211"""), sep="\s+")

df = df.assign(
    tempCol=lambda dfa: np.where(dfa["col2"].isna()|dfa["col3"].isna(), 
                                 np.nan, 
                                 dfa.loc[:,["col2","col3"]].min(axis=1))
)

输出

   col1   col2  col3  tempCol
0   347  933.0   338    338.0
1   500    NaN   200      NaN
2   938  523.0   211    211.0

相关问题 更多 >