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