首页 > 解决方案 > Pandas 对开始日期之后出现的列中的数据求和

问题描述

我知道我可以手动选择列名并找到行中的总和,但是有没有办法对开始日期或之后的所有值求和?如果该列是在或之后的日期,我只想添加到“总和”列start_date

我有一个熊猫数据框,如下所示:

d = {'start_date': ['01/2015', '01/2015', '02/2015', '03/2015'],'2015-01': [1, 1, 2, 3], '2015-02': [2, 1, 0, 1], '2015-03': [0, 1, 2, 1]}
df = pd.DataFrame(data=d)
df
   start_date   2015-01   2015-02   2015-03
0   01/2015         1        2         0
1   01/2015         1        1         1
2   02/2015         2        0         2
3   03/2015         3        1         1

我想获取日期列的逐行总和,从行的开始日期到结束。例如:

df
   start_date   2015-01   2015-02   2015-03   Sum
0   01/2015         1        2         0       3
1   01/2015         1        1         1       3
2   02/2015         2        0         2       2
3   03/2015         3        1         1       1

标签: pythonpandasdatedataframe

解决方案


首先你需要转换你的日期格式,然后我们可以使用numpy广播获取条件匹配,然后做sum

df.start_date=pd.to_datetime(df.start_date,format='%m/%Y').dt.strftime('%Y-%m')

s=df.start_date.values[:,None]<=df.columns[1:].values
df['Sum']=(df.iloc[:,1:]*s).sum(1)
df
Out[307]: 
  start_date  2015-01  2015-02  2015-03  Sum
0    2015-01        1        2        0    3
1    2015-01        1        1        1    3
2    2015-02        2        0        2    2
3    2015-03        3        1        1    1

推荐阅读