我知道我可以手动选择列名并在行中查找总和,但是有没有办法对开始日期或之后的所有值求和?如果该列是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
答案 0 :(得分:2)
首先,您需要转换日期格式,然后我们可以使用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