首页 > 解决方案 > python - 如何使用数据框列作为python中的参数来定义if-else函数?

问题描述

我需要编写一个函数,然后将其应用于熊猫中的数据框列。我的数据框看起来像这样。数据按 id 排序,然后按周期列排序。

        period       id   column1
0    2013-01-31      5   NaT
1    2013-02-28      5   28 days
2    2013-03-31      5   31 days
3    2013-04-30      5   30 days
4    2016-05-31      6   NaT
5    2016-06-30      6   30 days
6    2016-08-31      6   62 days

新列值应根据 column1 中的值定义:

如果 column1=NaT 或 column1>31 则新列等于周期列中的值

否则 - 新列的值应从其前一行复制:新列第 i 行 = 新列 i-1 行。

我对 python 很陌生,我的代码不起作用:

def f(x):
    if not x or x > 31
    return x=df['period']
    else
    return x=x.shift()
df['newcolumn'] = df['column1'].apply(f)

输出应该是这样的:

        period       id   column1  newcolumn
0    2013-01-31      5   NaT       2013-01-31 
1    2013-02-28      5   28 days   2013-01-31 
2    2013-03-31      5   31 days   2013-01-31 
3    2013-04-30      5   30 days   2013-01-31 
4    2016-05-31      6   NaT       2016-05-31
5    2016-06-30      6   30 days   2016-05-31
6    2016-08-31      6   62 days   2016-08-31

任何帮助将非常感激。

标签: pythonpandasnumpy

解决方案


您可以使用df.where(cond, other)which return return df's row if condition match else return other

df["newcolumn"] = df["period"].where(df["column1"].isnull() | (df["column1"]>pd.TimeDelta("31D")), df["column1"].shift())

推荐阅读