首页 > 解决方案 > Pandas Dataframe GroupBy,如何获得所有内容分组的值?

问题描述

我为标题道歉,我想不出更好的标题。我有一个 csv 文件,我正在读取数据框。此 CSV 跟踪机器开启的所有时间并记录该时间。我将时间转换为时间戳,然后 df.groupby()用于计算一小时内的所有事件。数据在数据框中看起来像这样:

                         Machines Used per Hour  Revenue per Hour
Timestamp                                                    
2021-08-22 06:00:00                       4             14.00
2021-08-22 08:00:00                       1              4.25
2021-08-22 09:00:00                       8             32.75
2021-08-22 10:00:00                      14             63.75

我遇到的问题是我可以获取每小时使用的机器和每小时收入的数据,但我无法获取时间戳。我想将时间戳推送到我的数据库中,因为它显示在数据框中,但它不是一个实际的列,我找不到自己获取它的方法。这是我的代码:

 df = wr.s3.read_csv(path=[f's3://{csvList[i].bucket_name}/{csvList[i].key}'])
 df['Timestamp'] = pd.to_datetime(df['Timestamp'])
 hourlyMachineUseCount = (df.groupby(df['Timestamp'].dt.floor('h'))['Machine Name'].count()) # Sorts by day, counting amount of machines used per hour
 totalHourlyRevenue = (df.groupby(df['Timestamp'].dt.floor('h'))['Total Revenue'].sum()) # Gives back the total revenue per hour per day 
 hours = (df.groupby(df['Timestamp'].dt.floor('h'))['Timestamp']) 

 machineAndRevenuePerHourDF = pd.DataFrame()
 machineAndRevenuePerHourDF['Machines Used per Hour'] = hourlyMachineUseCount
 machineAndRevenuePerHourDF['Revenue per Hour'] = totalHourlyRevenue
 machineAndRevenuePerHourDF['Timestamp'] = hours

小时变量是我目前卡住的地方。现在设置的方式是我的新数据帧时间戳列将在一小时内显示每次出现。

   2021-08-22 06:07:21
   2021-08-22 06:37:41
   2021-08-22 06:39:45
   2021-08-22 06:41:28

我希望它看起来像2021-08-22 06:00:00

标签: pythonpandasdataframepandas-groupby

解决方案


当您执行 aDataFrame.goupby()时,生成的 DataFrame 将by参数作为索引(此处为时间戳)。

您可以DataFrame.reset_index()在 groupby 之后使用将索引重置为默认值。旧索引将变回一列。


推荐阅读