Pandas 熊猫对每行求和直到零,然后保留零

Pandas 熊猫对每行求和直到零,然后保留零,pandas,python-3.6,Pandas,Python 3.6,第一次使用pandas,我提供了一个更小版本的数据帧,我创建的数据帧如下所示: Date project1 project2 project3 0 12/10/2017 100 200 300 1 12/11/2017 0 100 100 2 12/12/2017 0 0 100 我需要为每个单独的项目做2个求和运算,它在零处停止。另一个是所有项目的行。我一直在为日期或只是数零而挣扎。任何建议都将不胜感激。 因此,输出将如下所示: Date project1 p

第一次使用pandas,我提供了一个更小版本的数据帧,我创建的数据帧如下所示:

  Date project1 project2 project3    
0 12/10/2017 100 200 300   
1 12/11/2017 0 100 100   
2 12/12/2017 0 0 100   
我需要为每个单独的项目做2个求和运算,它在零处停止。另一个是所有项目的行。我一直在为日期或只是数零而挣扎。任何建议都将不胜感激。
因此,输出将如下所示:

 Date project1 project2 project3   
0 12/10/2017 100 200 300       
1 12/11/2017 0 300 400   
2 12/12/2017 0 0 500   

Date project1 project2 project3 project_sum   
0 12/10/2017 100 200 300 600   
1 12/11/2017 0 300 400 700   
2 12/12/2017 0 0 500 500

对于第一个问题,请使用
cumsum
cumprod

df[['project1','project2','project3']].cumsum().mask(df[['project1','project2','project3']].cumprod().eq(0),0)
Out[86]: 
   project1  project2  project3
0       100       200       300
1         0       300       400
2         0         0       500
然后使用
sum(axis=1)


我需要它,不仅仅是[project1,project2,等等],我在dic中循环使用ID,因为它是一个动态列表。还是循环是唯一的方法?i、 e.对于所有项目*@FancyDolphin,将df[[project1'、[project2'、[project3']]更改为df.loc[:,df.columns.str.contains('project')],还有一件额外的事情,我在制作另一件时如何将日期保留在那里dataframe@FancyDolphin您可以使用df.set\u index('Date')将其设置为索引
df[['project1','project2','project3']]=df[['project1','project2','project3']].cumsum().mask(df[['project1','project2','project3']].cumprod().eq(0),0)
df['projectSum']=df[['project1','project2','project3']].sum(1)
df
Out[89]: 
         Date  project1  project2  project3  projectSum
0  12/10/2017       100       200       300         600
1  12/11/2017         0       300       400         700
2  12/12/2017         0         0       500         500