Pandas 熊猫对每行求和直到零,然后保留零
第一次使用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
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