Pandas Dataframe GroupBy,如何获取所有分组依据的值?
Pandas Dataframe GroupBy, How to get the value that everything is grouped by?
我为标题道歉,我想不出更好的标题。我有一个正在读取到数据框的 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
当您执行 DataFrame.goupby()
时,生成的 DataFrame 将以 by
参数作为索引(此处为时间戳)。
您可以在 groupby 之后使用 DataFrame.reset_index()
将索引重置为默认值。旧索引将变回列。
您可以使用 agg
方法,而不是计算单独的变量并构建新的 DataFrame
:
df = df.groupby(df['Timestamp'].dt.floor('h')).agg(
machines_used_per_hour=('Machine Name', 'count'),
revenue_per_hour=('Total Revenue', 'sum')
).reset_index()
我为标题道歉,我想不出更好的标题。我有一个正在读取到数据框的 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
当您执行 DataFrame.goupby()
时,生成的 DataFrame 将以 by
参数作为索引(此处为时间戳)。
您可以在 groupby 之后使用 DataFrame.reset_index()
将索引重置为默认值。旧索引将变回列。
您可以使用 agg
方法,而不是计算单独的变量并构建新的 DataFrame
:
df = df.groupby(df['Timestamp'].dt.floor('h')).agg(
machines_used_per_hour=('Machine Name', 'count'),
revenue_per_hour=('Total Revenue', 'sum')
).reset_index()