如何在Pandas DataFrame中找到某个时间后仍然存在的元素

dy1byipe  于 2023-08-01  发布在  其他
关注(0)|答案(2)|浏览(100)

我有一个Pandas DataFrame,其中包含热带气旋(TC)位置、强度和时间的记录。它是这样安排的:


的数据
这里的相关数据包括CY,它本质上是该年盆地中TC的唯一标识符编号,以及YYYYMMDDHH列,它是输入观测的日期。
我想确定72小时后数据库中存在的 Storm 的日期。目前我正在尝试做以下类型的事情:

deck.loc[((deck['BASIN'] == deck['BASIN']) & (deck['CY'] == deck['CY']) 
      & (len(deck['YYYYMMDDHH'] == (deck['YYYYMMDDHH'] + datetime.timedelta(hours=72)))) > 0)]

字符串
然而,这并没有给我我想要的布尔序列的索引。我也考虑过一行一行地做事情,但要知道这违背了Pandas的哲学。

ztigrdn8

ztigrdn81#

由于您将数据作为图像发布,因此我重新创建了一个简单的示例。
我们在检查每次 Storm 的最后时间减去当前时间是否大于或等于72小时

df = pd.DataFrame({
    'storm': ['A','B'],
    'time': [pd.date_range(periods=75, freq='H', start='01-01-2022 00:00:00'),
             pd.date_range(periods=10, freq='H', start='01-01-2022 00:00:00')]
    }).explode('time')

(
    (df.groupby('storm')['time'].transform('max') - df['time'])
    .dt.total_seconds() / 3600
).ge(72)

字符串

1sbrub3j

1sbrub3j2#

使用xarray包(基本上是多维数据的pandas),您可以首先将数据集表示为具有单个时间维度的xarray.Dataset对象ds,并将basinCY指定为该维度沿着坐标。我认为其他一切都是数据变量。
那么你的操作可能会像这样表达:

duration = ds.time.groupby(['CY', 'basin']).sum(dim='time')
persistent_storms = ds.where(duration > datetime.timedelta(hours = 72))

字符串

相关问题