gpt4 book ai didi

python - Dataframe 按小时和最大日期过滤行

转载 作者:太空狗 更新时间:2023-10-29 23:56:29 31 4
gpt4 key购买 nike

在数据框中,我想按小时/键过滤某些“系列”中的所有行,并等于最大日期。

我有一段有效的代码,但想知道是否有更紧凑或更优雅的代码来实现相同的目标?

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

最佳答案

解决方案很好,只是小的简化 - bool 掩码应该被缓存到变量 m 并且为了反转使用 ~,也是双 DataFrame.reset_index被使用 - 首先用于从索引中删除第二级,第二个用于从索引中删除列:

m = df.Key.isin(Keys2Filter)
df = (df[~m].append(df[m].groupby(by=["Key", df.Date.dt.hour])
.max()
.reset_index(level=1, drop=True)
.reset_index()))

print (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

关于python - Dataframe 按小时和最大日期过滤行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55762265/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com