我有一个 pandas dataFrame,其中包含 3 列天气数据 - 温度、时间和气象站名称。
看起来像这样:
我想计算 station_a 与 station_b 在同一分钟的温差(因为时间戳不完全相等,但在分钟级别精确(并且每 10 分钟只有一次测量)在新列中。
有办法吗?
最佳答案
您可以使用 merge_asof
在两个子数据帧上:
df['Time'] = pd.to_datetime(df['Time'])
out = (pd
.merge_asof(df[df['Station_name'].eq('station_a')],
df[df['Station_name'].eq('station_b')],
on='Time', direction='nearest',
tolerance=pd.Timedelta('1min'),
suffixes=('_a', '_b')
)
.set_index('Time')
.eval('diff = Temperature_b - Temperature_a')
['diff']
)
输出:
Time
2022-05-12 22:09:35+00:00 -0.3
Name: diff, dtype: float64
您也可以尝试四舍五入
,但是如果一个时间向上舍入而另一个向下舍入则风险更大:
df['Time'] = pd.to_datetime(df['Time'])
(df
.assign(Time=df['Time'].dt.round('10min'))
.pivot('Time', 'Station_name', 'Temperature')
.eval('diff = station_b - station_a')
)
输出:
Station_name station_a station_b diff
Time
2022-05-12 22:10:00+00:00 18.3 18.0 -0.3
https://stackoverflow.com/questions/72920875/
相关文章:
Python 修补类 - 方法 return_value 返回 MagicMock
sass - 当我在汇总中使用 scss 时出现意外字符 '@'(请注意,您需要插件才能导入非 Ja
python - 名称错误 : name 'scipy' is not defined when t
reactjs - eslint 无法加载配置 "react-app"以从中扩展
reactjs - 在进行客户端查询时,我应该如何为 Github graphql API 提供身份
github-pages - 自定义 GitHub 页面部署说明