python - Pandas 数据框列表理解中的 If ElseIf Else 条件

标签 python pandas

我有一个包含 11 列的数据框:Status1-Status5、Time1-Time5 和 Time_Min

df = pd.DataFrame([[100,200,150,400,500,'a','b','a','c','a',100], [300,400,200,500,250,'b','b','c','c','c',200]], columns=['TIME_1', 'TIME_2', 'TIME_3', 'TIME_4', 'TIME_5','STATUS_1','STATUS_2','STATUS_3','STATUS_4','STATUS_5','TIME_MIN'])

我想重现我目前在 SAS 中执行以下操作的代码

IF TIME_1 = TIME_MIN THEN STATUS = STATUS_1;
ELSE IF TIME_2 = TIME_MIN THEN STATUS = STATUS_2;
ELSE IF TIME_3 = TIME_MIN THEN STATUS = STATUS_3;
ELSE IF TIME_4 = TIME_MIN THEN STATUS = STATUS_4;
ELSE STATUS = STATUS_5;

列 STATUS 的预期输出为

['a','c']

我尝试按照这些思路构建一些东西(需要用 else ifs 进行扩展)

df['STATUS'] = [a if x == y else b for x,y,a,b in df[['TIME_MIN','TIME_1','STATUS_1','STATUS_2']]]

但这只是给出了一个错误。我确定这是一个简单的修复,但我不太明白。

最佳答案

你可以写一个函数

def get_status(df):
    if df['TIME_1'] == df['TIME_MIN']:
        return df['STATUS_1']
    elif df['TIME_2'] == df['TIME_MIN']:
        return df['STATUS_2']
    elif df['TIME_3'] == df['TIME_MIN']:
        return df['STATUS_3']
    elif df['TIME_4'] == df['TIME_MIN']:
        return df['STATUS_4']
    else:
        return df['STATUS_5']

df['STATUS'] = df.apply(get_status, axis = 1)

或者使用非常嵌套的 np.where,

df['STATUS'] = np.where(df['TIME_1'] == df['TIME_MIN'], df['STATUS_1'],\ 
        np.where(df['TIME_2'] == df['TIME_MIN'], df['STATUS_2'],\
        np.where(df['TIME_3'] == df['TIME_MIN'], df['STATUS_3'],\
        np.where(df['TIME_4'] == df['TIME_MIN'], df['STATUS_4'], df['STATUS_5']))))

关于python - Pandas 数据框列表理解中的 If ElseIf Else 条件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48527420/

相关文章:

python - 如何在列表中添加多个 Pandas 数据系列的项目 - python

python - 如何找到 python 字典或 JSON 对象的最大值 "depth"?

python - 包含列表所有值的 Pandas DataFrame 行

python - Seaborn 分类数据条形图,分组

python - 如何对数据进行分组并绘制折线图

python - 属性错误: module 'wikipedia' has no attribute 'summary'

python - 格式化 django admin 中呈现的内联多对多相关模型

python - 通过雅可比行列式进行 lmfit 最小二乘法

sql - PostgreSQL/Pandas 插入包含 null/np.nan/空值的稀疏数组

python - Pandas DataFrame 图 : Permanently change default colormap