Python熊猫每天从熊猫数据框索引中删除第一分钟

时间:2020-09-19 00:54:42

标签: python pandas datetime grouping

我具有如下结构的contract_df数据框:

df = pd.DataFrame({'quote_ts': ['2020-05-15 14:01:00.522517', 
                                '2020-05-15 14:01:00.599999', 
                                '2020-05-15 15:00:01.234517',
                                '2020-05-16 14:00:00.312518',
                                '2020-05-16 14:01:00.582517',
                                '2020-05-17 14:00:00.122983',
                                '2020-05-17 14:02:00.524567',
                                '2020-05-18 14:00:00.522517'],
                   'price': [1000, 1200, 1300, 1000, 1400, 1800, 1900, 1600]})

df = df.set_index('quote_ts')

我需要删除每天的第一分钟,以使结果数据框等于:

df = pd.DataFrame({'quote_ts': ['2020-05-15 15:00:01.234517',
                                '2020-05-16 14:01:00.582517',
                                '2020-05-17 14:02:00.524567'],
                   'price': [1300, 1400, 1600]})

df = df.set_index('quote_ts')

第一天在不同的日子不一定总是一样的。

2 个答案:

答案 0 :(得分:3)

让我们尝试isingroupby head

df.index=pd.to_datetime(df.index)
toremove = df.groupby(df.index.date).head(1).index.strftime('%Y-%m-%d %H:%M')
df = df[~df.index.strftime('%Y-%m-%d %H:%M').isin(toremove)]
df
                            price
quote_ts                         
2020-05-15 15:00:01.234517   1300
2020-05-16 14:01:00.582517   1400
2020-05-17 14:02:00.524567   1900

答案 1 :(得分:1)

使用groupby.rank创建布尔掩码

s = pd.to_datetime(df.index)
m = ((s.floor('Min').to_series().groupby(s.date).rank(method='dense') > 1)
                                                .to_numpy())
df_final = df[m]

Out[338]:
                            price
quote_ts
2020-05-15 15:00:01.234517   1300
2020-05-16 14:01:00.582517   1400
2020-05-17 14:02:00.524567   1900