Pandas:通过列标记值修改

时间:2018-03-20 22:25:35

标签: python-3.x pandas

我有一个这样的数据框:

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

有谁知道如何实现这个目标?

提前致谢。

1 个答案:

答案 0 :(得分:2)

假设您的数据框为df,请使用pd.DataFrame.where

df.where(
    df.gt(0) & df.shift(axis=1).eq(0),
    0
)