我有一个这样的数据框:
In [24]: df = pd.DataFrame({'id': ['a','a','b','b','c','c'],'date':[201708,201709,201708,201709,201708,201709],'value':[0,15,20,30,20,0]})
In [25]: df
Out[25]:
date id value
0 201708 a 0
1 201709 a 15
2 201708 b 20
3 201709 b 30
4 201708 c 20
5 201709 c 0
我有这个衍生的数据透视表:
In [26]: base=pd.pivot_table(df,index='id',columns='date',values='value',aggfunc='sum',fill_value=0,margins=False)
In [27]: base
Out[27]:
date 201708 201709
id
a 0 15
b 20 30
c 20 0
我需要从此数据透视表创建另一个df。在这个新的数据帧中,我需要显示每个id的值,这些值在date = t时大于零,并在前一个日期(date = t-1)评估为零。我需要的结果就是这个df:
date 201708 201709
id
a 0 15
b 0 0
c 0 0
有谁知道如何实现这个目标?
提前致谢。
答案 0 :(得分:2)
假设您的数据框为df
,请使用pd.DataFrame.where
df.where(
df.gt(0) & df.shift(axis=1).eq(0),
0
)