在数据帧中,我想通过小时/键和等于最大日期来过滤某些“序列”的所有行。
我有一段可工作的代码,但想知道是否有更简洁或更优雅的方法来实现相同的功能?
df = pd.read_csv("./example.csv")
df["Date"] = pd.to_datetime(df["Date"])
Keys2Filter = (1, 2)
df
...
Key Date Value
0 1 2019-04-17 00:00:00 1
1 1 2019-04-17 01:00:00 2
2 1 2019-04-17 02:00:00 3
3 1 2019-04-17 00:00:00 4
4 1 2019-04-17 01:00:00 5
5 1 2019-04-17 00:00:00 7
6 2 2019-04-17 01:00:00 8
7 2 2019-04-17 02:00:00 9
8 2 2019-04-17 00:00:00 9
9 2 2019-04-17 01:00:00 9
10 3 2019-04-17 01:00:00 9
11 3 2019-04-17 01:00:00 9
...
if (len(Keys2Filter)):
dfMax = df[df.Key.isin(Keys2Filter)]
dfMax = dfMax.groupby(by=["Key", dfMax.Date.dt.hour]).max()
dfMax.index.names = ["Key", "Hour"]
dfMax = dfMax.reset_index()
df = df[~df.Key.isin(Keys2Filter)].append(dfMax.drop(columns=['Hour']))
df
Key Date Value
10 3 2019-04-17 01:00:00 9
11 3 2019-04-17 01:00:00 9
0 1 2019-04-17 00:00:00 7
1 1 2019-04-17 01:00:00 5
2 1 2019-04-17 02:00:00 3
3 2 2019-04-17 00:00:00 9
4 2 2019-04-17 01:00:00 9
5 2 2019-04-17 02:00:00 9