python - 同时从两列中减去值( Pandas , python )

我有一个 pandas dataFrame,其中包含 3 列天气数据 - 温度、时间和气象站名称。

看起来像这样:

时间 站名 温度 2022-05-12 22:09:35+00:00 station_a 18.3 2022-05-12 22:09:42+00:00 station_b 18.0 表>

我想计算 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

java - 什么被认为是 Java 核心模块?

sass - 当我在汇总中使用 scss 时出现意外字符 '@'(请注意,您需要插件才能导入非 Ja

python - 名称错误 : name 'scipy' is not defined when t

reactjs - eslint 无法加载配置 "react-app"以从中扩展

reactjs - 在进行客户端查询时,我应该如何为 Github graphql API 提供身份

github-pages - 自定义 GitHub 页面部署说明

mermaid - 使用渲染函数时节点上的事件不调用函数

windows - 为什么 powershell 说 cl.exe 不被识别?

algorithm - 计算具有整数边和给定斜边的直角三角形