簡體   English   中英

在 Pandas DataFrame 中查找具有每天最小值/最大值的行

[英]Find row with min/max value for each day in Pandas DataFrame

我有一個 dataframe ,其中包含多天數據(為簡潔起見,此處僅顯示一天):

                       Charge
2022-01-03 13:19:02    99.5
2022-01-03 13:20:03    95.0
2022-01-03 13:21:02    64.2
2022-01-03 13:22:02    91.8
2022-01-03 13:23:02    99.5

我希望能夠找到具有最小值和最大值的行,以便我可以獲得最小和最大充電的確切時間。 如果有多個,我只會 select 第一次出現。 IE:

                       Charge
2022-01-03 13:19:02    99.5
2022-01-03 13:21:02    64.2

我試過使用:

df_bat_chrg_min = df['Battery State of Charge'].groupby(df.index.day).min()
df_bat_chrg_max = df['Battery State of Charge'].groupby(df.index.day).max()
df_bat_chrg = pd.merge(df_bat_chrg_max, df_bat_chrg_min, left_index=True, right_index=True)

這會產生:

            Max Charge  Min Charge
2022-01-03  100.0       96.5

但是,索引名稱不包括事件的確切時間,如第二個代碼塊所示。

使用DataFrameGroupBy.idxmaxDataFrameGroupBy.idxmin按最小值和最大值進行索引,通過DataFrame.loc轉換為Series和 select 原始DatetimeIndex

df1 = (df.loc[df.groupby(df.index.day)['Charge']
               .agg(['idxmin', 'idxmax']).stack()].sort_index())
print (df1)
                     Charge
2022-01-03 13:19:02    99.5
2022-01-03 13:21:02    64.2

如果需要聚合新列:

df2 = df.groupby(df.index.day)['Charge'].agg(['min','max', 'idxmin', 'idxmax'])
print (df2)
    min   max              idxmin              idxmax
3  64.2  99.5 2022-01-03 13:21:02 2022-01-03 13:19:02

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM