重采样DatetimeIndex

时间:2020-11-09 23:18:19

标签: pandas

我需要按每周某个值获得前n行(并且我有每小时的数据)。

数据

import numpy as np 
import pandas as pd


dates = pd.date_range(start='1/1/2020', end='11/1/2020', freq="1H")
values = np.random.randint(20, 100500, len(dates))
some_other_column = np.random.randint(0, 10000000, len(dates))
df = pd.DataFrame({"date": dates, "value": values, "another_column": some_other_column})

我的尝试:

resampled = df.set_index("date").resample("W")["value"].nlargest(5).to_frame()

它确实给出了前5行,但是除datevalue之外的所有其他列都缺失了-我想保留所有它们(在我的数据集中,我有很多列,但是这里{{1 }}只是为了表明它不存在。

我想出的解决方案:

another_column

但是这一切都感觉不对,我知道应该有更简单的解决方案。有帮助吗?

2 个答案:

答案 0 :(得分:1)

Groupby,并屏蔽任何nlargest

df.set_index('date', inplace=True)
df[df.groupby(df.index.week)['value'].transform(lambda x:x.nlargest(5).any())]

答案 1 :(得分:1)

我正在寻找的输出。谢谢@wwnde。

df["week"] = df["date"].dt.isocalendar().week
df.loc[df.groupby("week")["value"].nlargest(5).index.get_level_values(1), :]

enter image description here