首页 > 解决方案 > 如何在数据框python中捕获每天的最后一个快照

问题描述

我有一个这样的数据框:

                            A         B        C
2015-01-01 00:00:00     597.5259   376.1830    a
2015-01-01 00:00:00     461.2014   244.0453    a
2015-01-01 00:00:00     283.9003   166.5772    b
2015-01-01 09:04:00      93.5099    50.7761    a
2015-01-01 09:04:00       1.1559     0.2784    b
2015-01-01 09:31:00      95.0285    29.1006    a
2015-01-01 09:31:00     241.8822   120.1049    b
2015-01-01 12:16:00     363.8040   196.0568    a
2015-01-01 14:04:00     438.2264   274.3733    a
2015-01-01 16:30:00     456.3396   330.6650    a
2015-01-01 16:30:00     368.3211     0.2617    a
2015-01-01 16:30:00     456.3396     0.1939    b

2015-01-02 09:28:00     241.8822   120.1049    b
2015-01-02 09:28:00     212.3111   389.2911    b
2015-01-02 10:27:00     363.8040   196.0568    a
2015-01-02 13:02:00     438.2264   274.3733    a
2015-01-02 16:27:00     456.3396   330.6650    a
2015-01-02 16:27:00     368.3211     0.2617    a
2015-01-02 16:27:00     456.3396     0.1939    b
    ...                   ...        ...       ...

我想获取数据框中每一天的最后一个快照,即

                            A         B        C
2015-01-01 16:30:00     456.3396   330.6650    a
2015-01-01 16:30:00     368.3211     0.2617    a
2015-01-01 16:30:00     456.3396     0.1939    b

2015-01-02 16:27:00     456.3396   330.6650    a
2015-01-02 16:27:00     368.3211     0.2617    a
2015-01-02 16:27:00     456.3396     0.1939    b

我是python的新手,我的思路是定义一个函数来获取时间戳列表并选择列表的最后一个元素。但这对我来说非常复杂,我不知道如何执行。

我试过

df = df.groupby(df.index).last()

或者

df = df.groupby(df.index.timestamp).apply(lambda x: x.iloc[[0, -1]])

这些方法不起作用,因为每天最后一个快照的行数可能不同。你能帮我吗?非常感谢。

标签: pythonpandasdataframe

解决方案


您可以按天分组并与最后一个索引进行比较:

print (df.groupby(pd.Grouper(freq="D"), as_index=False).apply(lambda d: d[d.index==d.index[-1]]))

或使用比较transform

print (df[df.index==df.reset_index().groupby(pd.Grouper(key="index", freq="D"))["index"].transform("max")])

                              A         B  C
0 2015-01-01 16:30:00  456.3396  330.6650  a
  2015-01-01 16:30:00  368.3211    0.2617  a
  2015-01-01 16:30:00  456.3396    0.1939  b
1 2015-01-02 16:27:00  456.3396  330.6650  a
  2015-01-02 16:27:00  368.3211    0.2617  a
  2015-01-02 16:27:00  456.3396    0.1939  b

推荐阅读