pandas - Pandas 列级别每行时间戳之间的差异
问题描述
我有以下数据框:df
Date Type
0 1990-01-01 02:00:00 1
1 1990-01-01 03:00:00 1
2 1990-01-01 04:00:00 1
3 1990-01-01 05:00:00 2
4 1990-01-01 06:00:00 2
5 1990-01-01 07:00:00 2
如何在列级别 df['time'] 内以秒为单位获得新列 df['dt'] 上每行的时差?以下工作(但不在列级别):
df['dt'] = (df['Date'] - df['Date'].shift(1)).astype('timedelta64[s]')
我如何让它在列级别上工作?理想情况下,新类型的开头应该有 0 作为时间差。
解决方案
对于shift
减去值的解决方案,Series.sub
每组的移位数据为DataFrameGroupBy.shift
,将缺失值替换为0 Timedeta
和最后使用Series.dt.total_seconds
:
df = pd.DataFrame()
df['HH'] = np.arange(0,10)
start_date ='1990-01-01 00:00:00'
df['Date'] = pd.to_datetime(df['HH'], unit='h', origin=start_date)
df['Type'] = [1,1,1,1,1,2,2,2,2,2]
s = df.groupby("Type")['Date'].shift()
df['dt2'] = df['Date'].sub(s).fillna(pd.Timedelta(0)).dt.total_seconds()
print (df)
HH Date Type dt2
0 0 1990-01-01 00:00:00 1 0.0
1 1 1990-01-01 01:00:00 1 3600.0
2 2 1990-01-01 02:00:00 1 3600.0
3 3 1990-01-01 03:00:00 1 3600.0
4 4 1990-01-01 04:00:00 1 3600.0
5 5 1990-01-01 05:00:00 2 0.0
6 6 1990-01-01 06:00:00 2 3600.0
7 7 1990-01-01 07:00:00 2 3600.0
8 8 1990-01-01 08:00:00 2 3600.0
9 9 1990-01-01 09:00:00 2 3600.0
另一个想法DataFrameGroupBy.diff
:
df['dt2'] = df.groupby("Type")['Date'].diff().fillna(pd.Timedelta(0)).dt.total_seconds()
推荐阅读
- google-bigquery - 将相同的行组聚合为一行
- python - 连接/合并数据框
- gradle - 如何为 install4j 提供密钥文件密码
- java - 我正在尝试从 java 调用 Rest API 并接收 302
- javascript - 子组件中的间隔父函数
- sql - SQL Server 中的选项(MAXRECURSION 0)
- sql - 在 SQL Server 中计算同一行中的值
- html - 奇异快递指的是不存在的对象?
- javascript - HTML5 画布在 Google Chrome 中闪烁
- drupal - 可恢复的致命错误:ini_set():无法通过 ini_set() 或 session_module_name() 设置“用户”保存处理程序 - Drupal