python - 高效使用numpy select
问题描述
我有一些数据如下。我正在尝试计算Time bw
列中的值(第 4 行中应该为 0)。每当Location
移动到一个新的,比如a
,b
我希望Time bw
从 0 重新开始。我正在尝试使用ne
,select
并且diff()
+----------+---------------------+----------+
| Location | Date | Time bw |
+----------+---------------------+----------+
| a | 2018-06-26 00:00:00 | 0 |
| a | 2018-06-26 00:00:00 | 0 |
| a | 2018-06-26 00:00:00 | 0 |
| b | 2018-08-03 00:00:00 | 38 |
| b | 2018-08-03 00:00:00 | 0 |
| b | 2018-08-04 00:00:00 | 1 |
| b | 2018-08-04 00:00:00 | 0 |
| b | 2018-08-04 00:00:00 | 0 |
| b | 2018-08-04 00:00:00 | 0 |
| b | 2018-08-04 00:00:00 | 0 |
| b | 2018-08-04 00:00:00 | 0 |
| b | 2018-08-05 00:00:00 | 1 |
| b | 2018-08-08 00:00:00 | 3 |
| b | 2018-08-08 00:00:00 | 0 |
| b | 2018-08-08 00:00:00 | 0 |
| b | 2018-08-08 00:00:00 | 0 |
| b | 2018-08-08 00:00:00 | 0 |
| c | 2018-08-14 00:00:00 | 6 |
| c | 2018-08-14 00:00:00 | 0 |
| c | 2018-08-14 00:00:00 | 0 |
+----------+---------------------+----------+
解决方案
国际大学联盟:
df['Time bw'] = np.where(df.Location.ne(df.Location.shift()), 0, df['Time bw'])
输出:
Location Date Time bw
0 a 20180626 00:00:00 0
1 a 20180626 00:00:00 0
2 a 20180626 00:00:00 0
3 b 20180803 00:00:00 0
4 b 20180803 00:00:00 0
5 b 20180804 00:00:00 1
6 b 20180804 00:00:00 0
7 b 20180804 00:00:00 0
8 b 20180804 00:00:00 0
9 b 20180804 00:00:00 0
10 b 20180804 00:00:00 0
11 b 20180805 00:00:00 1
12 b 20180808 00:00:00 3
13 b 20180808 00:00:00 0
14 b 20180808 00:00:00 0
15 b 20180808 00:00:00 0
16 b 20180808 00:00:00 0
17 c 20180814 00:00:00 0
18 c 20180814 00:00:00 0
19 c 20180814 00:00:00 0
推荐阅读
- javascript - JavaScript:如何将数组倒计时 10 秒?
- javascript - expressjs 路由器无法发布表单数据
- javascript - javascript匹配获取所有带有数字的类名
- c - 在 C 中使用 epoll() 和原始套接字
- qt - QMake 变量在 .pri 函数中修改时不会改变
- javascript - 我不明白此代码段中“(oldest.years || 0)”的用法
- python - 是否有自定义方法来收集 pytest 结果?
- c - FILE 结构中未使用的变量
- ios - AFNetworking 3.2.0 ' 配置的安全策略只能应用于具有安全基本 URL(即 https)的管理器
- javascript - javascript 超时如何在执行堆栈中工作?