pandas 中的新列,其值取决于其他列

Sta*_*ser 11 python numpy pandas data-science

我有一个示例数据:

datetime             col1    col2    col3
2021-04-10 01:00:00    25.    50.     50
2021-04-10 02:00:00.   25.    50.     50
2021-04-10 03:00:00.   25.    100.    50
2021-04-10 04:00:00    50.     50.    100
2021-04-10 05:00:00.   100.    100.   100
Run Code Online (Sandbox Code Playgroud)

我想创建一个名为 state 的新列,如果 col2 和 col3 值小于或等于 50,则返回 col1 值,否则返回 col1、column2 和 column3 之间的最大值。

预期输出如下图所示:

datetime             col1    col2    col3. state
2021-04-10 01:00:00    25.    50.     50.   25
2021-04-10 02:00:00.   25.    50.     50.   25
2021-04-10 03:00:00.   25.    100.    50.   100
2021-04-10 04:00:00    50.     50.    100.  100
2021-04-10 05:00:00.   100.    100.   100.  100
Run Code Online (Sandbox Code Playgroud)

xss*_*han 18

为了改进其他答案,我将使用pandas apply迭代行并计算新列。

def calc_new_col(row):
   if row['col2'] <= 50 & row['col3'] <= 50:
        return row['col1']
    else:
        return max(row['col1'], row['col2'], row['col3'])

df["state"] = df.apply(calc_new_col, axis=1)
# axis=1 makes sure that function is applied to each row

print(df)
            datetime  col1  col2  col3  state
2021-04-10  01:00:00    25    50    50     25
2021-04-10  02:00:00    25    50    50     25
2021-04-10  03:00:00    25   100    50    100
2021-04-10  04:00:00    50    50   100    100
2021-04-10  05:00:00   100   100   100    100

Run Code Online (Sandbox Code Playgroud)

apply帮助代码更清晰、更可重用。