Python pandas 从 pandas 数据帧索引中删除每天的第一分钟
Python pandas remove first minute for every day from a pandas dataframe index
我的 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')
第一分钟在不同的日子里并不总是相同的。
让我们尝试 isin
和 groupby
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
使用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
我的 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')
第一分钟在不同的日子里并不总是相同的。
让我们尝试 isin
和 groupby
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
使用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