python - 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
解决方案
当您执行 aDataFrame.goupby()
时,生成的 DataFrame 将by
参数作为索引(此处为时间戳)。
您可以DataFrame.reset_index()
在 groupby 之后使用将索引重置为默认值。旧索引将变回一列。
推荐阅读
- svg - 使用 CSS 为其添加大小时,SVG 不缩放
- r - heatmap.2() (gplots) 旋转对角线
- pandas - 将 xticks 设置为 df 列中的唯一值 - Seaborn
- reactjs - 自定义钩子和动态 useEffect 依赖
- border - |助推器 5| 边框颜色不变
- node.js - Discord Ouath2 访问令牌“不支持授予类型无”
- scheduled-tasks - 任务调度程序中的任务触发器
- angular - ng build --configuration 生产在 Jenkins 上需要 30 多分钟,但在本地需要 5-6 分钟
- java - 我想显示具有最高度量的行。但对我来说什么都没有
- reactjs - 无法在 react-lazyload 中将组件显示为占位符