Python 基于日期值向月份列添加值

Python 基于日期值向月份列添加值,python,pandas,Python,Pandas,我有一个用户观察数据框 每个观察都有一个id、userID、注册月份和取消月份。 每个用户标识可以有多个条目(顺序) 我想为每个月创建一列,设置为1或0,具体取决于用户是否处于活动状态。我想在2017-01年到2018-12年间开设专栏 示例:userID 3已于2018-03年注册,并于2018-05年取消。对于该观察,2018-03、2018-04和2018-05列的值应为1,所有其他列的值应为0 不知道如何在python中以最有效的方式完成 预期产量 id用户id注册月取消月任期2017-

我有一个用户观察数据框

每个观察都有一个id、userID、注册月份和取消月份。 每个用户标识可以有多个条目(顺序)

我想为每个月创建一列,设置为1或0,具体取决于用户是否处于活动状态。我想在2017-01年到2018-12年间开设专栏

示例:userID 3已于2018-03年注册,并于2018-05年取消。对于该观察,2018-03、2018-04和2018-05列的值应为1,所有其他列的值应为0

不知道如何在python中以最有效的方式完成

预期产量

id用户id注册月取消月任期2017-01 2017-02。。。2018-03  2018-04  2018-05 2018-06 ... 2018-12
23  23434  2018-03       2018-05      3       0        0       ... 1        1   1    0       0       ... 0
24  23435  2017-01       2018-03      14      1        1       ... 1        0   0    0       0       ... 0```
在列表理解中使用匹配值的词典列表,创建数据框,将缺少的值替换为
0
和原始值:

L = [dict.fromkeys(pd.period_range(s, e), 1) 
           for s, e in zip(df['signupmonth'], df['cancelmonth'])]

rng = pd.period_range('2017-01', '2018-12', freq='m')
df1 = pd.DataFrame(L, index=df.index, columns=rng).fillna(0).astype(int)
print (df1)
   2017-01  2017-02  2017-03  2017-04  2017-05  2017-06  2017-07  2017-08  \
0        0        0        0        0        0        0        0        0   
1        1        1        1        1        1        1        1        1   

   2017-09  2017-10  ...  2018-03  2018-04  2018-05  2018-06  2018-07  \
0        0        0  ...        1        1        1        0        0   
1        1        1  ...        1        0        0        0        0   

   2018-08  2018-09  2018-10  2018-11  2018-12  
0        0        0        0        0        0  
1        0        0        0        0        0  

[2 rows x 24 columns]

df = df.join(df1)
#print (df)

您能否添加一些示例数据、预期输出,例如2个用户?@jezrael给您!