如何使用带有日期过滤器的IF else创建新列(然后替换为SAS) - python

我想在Python dataFrame中创建一个新列,但是我的代码无法正常工作。

recession = 0
recovery = 0

if data['excl_flg'] == 0 and data['segment'] != 'ignore':
    if (data['vardate'].dt.to_period('M') - '2008-06-30'.dt.to_period('M')) < 0 & (data['vardate'].dt.to_period('M') - '31Mar2010'.dt.to_period('M') >= 0:
         recession = 1
    elif (data['vardate'].dt.to_period('M') - '31Mar2010'.dt.to_period('M')) < 0 and (data['vardate'].dt.to_period('M') - '30Sep2013'.dt.to_period('M')) >= 0:
        recovery = 1

如何使用带有日期过滤器的IF else创建新列(然后替换为SAS) - python

这是我的数据,我正在尝试创建新的列衰退和恢复。任何帮助表示赞赏。

python参考方案

试试这个..如果没有用,但可以达到目的。

数据

   excl_flag        segment    vardate    obsdate
0          0         CC_620  2/29/2008  3/31/2008
1          1  CC_cur_It_660  2/28/2009  3/31/2009
2          0         ignore  2/28/2010  3/31/2010
3          0         CC_620  2/28/2011  3/31/2011
4          1         ignore  2/29/2012  3/31/2012
5          0         CC_620  2/28/2013  3/31/2013
6          1  CC_cur_It_660  2/28/2014  3/31/2014
7          0         CC_620  2/28/2015  3/31/2015
8          1  CC_cur_It_660  2/29/2016  3/31/2016
9          0         ignore  2/28/2017  3/31/2017

必要的进口

from datetime import datetime
import pandas as pd

涵盖日期格式

data['vardate'] = pd.to_datetime(data['vardate']).apply(lambda x: x.date())
data['obsdate'] = pd.to_datetime(data['obsdate']).apply(lambda x: x.date())

data['recession'] = 0
data['recovery'] = 0

实施条件

data[((data['excl_flag'] == 0) & (data['segment'] != 'ignore'))].loc[(data['vardate']- datetime.strptime('2008-06-30',"%Y-%m-%d").date()).apply(lambda x: x.days < 0 )  & ((data['vardate'] - datetime.strptime('31Mar2010',"%d%b%Y").date()).apply(lambda x: x.days >=0)), 'recession'] = 1


data[((data['excl_flag'] == 0) & (data['segment'] != 'ignore'))].loc[(data['vardate']- datetime.strptime('31Mar2010',"%d%b%Y").date()).apply(lambda x: x.days < 0 )  & ((data['vardate'] - datetime.strptime('30Sep2013',"%d%b%Y").date()).apply(lambda x: x.days >=0)), 'recovery'] = 1

print(data) 

您的结果为零,因为您指定的条件找不到任何接受者

   excl_flag        segment     vardate     obsdate  recession  recovery
0          0         CC_620  2008-02-29  2008-03-31          0         0
1          1  CC_cur_It_660  2009-02-28  2009-03-31          0         0
2          0         ignore  2010-02-28  2010-03-31          0         0
3          0         CC_620  2011-02-28  2011-03-31          0         0
4          1         ignore  2012-02-29  2012-03-31          0         0
5          0         CC_620  2013-02-28  2013-03-31          0         0
6          1  CC_cur_It_660  2014-02-28  2014-03-31          0         0
7          0         CC_620  2015-02-28  2015-03-31          0         0
8          1  CC_cur_It_660  2016-02-29  2016-03-31          0         0
9          0         ignore  2017-02-28  2017-03-31          0         0

R'relaimpo'软件包的Python端口 - python

我需要计算Lindeman-Merenda-Gold(LMG)分数,以进行回归分析。我发现R语言的relaimpo包下有该文件。不幸的是,我对R没有任何经验。我检查了互联网,但找不到。这个程序包有python端口吗?如果不存在,是否可以通过python使用该包? python参考方案 最近,我遇到了pingouin库。

将字符串分配给numpy.zeros数组[重复] - python

This question already has answers here: Weird behaviour initializing a numpy array of string data                                                                    (4个答案)         …

Python:如何根据另一列元素明智地查找一列中的空单元格计数? - python

df = pd.DataFrame({'user': ['Bob', 'Jane', 'Alice','Jane', 'Alice','Bob', 'Alice'], 'income…

Python pytz时区函数返回的时区为9分钟 - python

由于某些原因,我无法从以下代码中找出原因:>>> from pytz import timezone >>> timezone('America/Chicago') 我得到:<DstTzInfo 'America/Chicago' LMT-1 day, 18:09:00 STD…

Python:同时在for循环中添加到列表列表 - python

我想用for循环外的0索引值创建一个新列表,然后使用for循环添加到相同的列表。我的玩具示例是:import random data = ['t1', 't2', 't3'] masterlist = [['col1', 'animal1', 'an…