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

标签 python pandas datetime difference

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

看起来像这样:

<表类="s-表"> <头> 时间 站名 温度 <正文> 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

关于python - 同时从两列中减去值( Pandas , python ),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72920875/

相关文章:

python - 如何读取pandas中的第一列和最后一列?

Python Pandas,读取文件并跳过标题前的行

python - 如何在 Microsoft Azure 中提取 Blob 存储中的 Blob 的上次修改日期

python-逻辑回归,将预测概率和预测保存到csv

c++ - STL 中 next_permutation 的 Python 实现

python - 无法在 MacOS 上使用 pyenv Python 安装 tkinter

python - 两个时间戳系列之间的工作时间,不包括周末和节假日

python - 使用 Selenium Python 从页面源获取元标记

python - 条形图不尊重 matplotlib 中图例文本的顺序

r - 如何将字符时间戳转换为 R 中的日期时间对象