我需要按每周某个值获得前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行,但是除date
和value
之外的所有其他列都缺失了-我想保留所有它们(在我的数据集中,我有很多列,但是这里{{1 }}只是为了表明它不存在。
我想出的解决方案:
another_column
但是这一切都感觉不对,我知道应该有更简单的解决方案。有帮助吗?
答案 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)