python - 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
解决方案
首先你需要转换你的日期格式,然后我们可以使用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
推荐阅读
- javascript - Electron webview new-window event returning `about:blank` as Url
- c++ - 如何在 C++ 中为二维向量中的元素赋值?
- php - 带有url参数的htaccess路由
- azure - AzureBlobContent 上的转义字符
- php - 如何在 Geben(Xdebug 的 Emacs 远程调试客户端)中查看函数/方法的返回值?
- python - 去歪斜图像中的单个字符
- java - 在JDK8中查找TLS协议版本
- php - PDOConnection.php 第 24 行 Laravel 5.3 中的 FatalThrowableError
- node.js - Firebase 存储-如何使用 node.js 从存储中删除文件?
- android - 认证成功后再次开启指纹服务