Python 百分比列

问题描述 投票:0回答:1

我需要有人帮助解决数据分析问题。

我正在分析一个包含睡眠数据的数据框。 它有 5 列,如下所示: data frame

足够 - 您认为您的睡眠充足吗? 时间 - 平均而言,您每个工作日晚上的睡眠时间是多少? PhoneReach - 您睡觉时是否会将手机放在触手可及的地方? 电话时间 - 您入睡后 30 分钟内是否使用手机? 疲倦 - 从 1 到 5 的等级,您一整天有多累? (1不累,5很累) 早餐 - 你通常吃早餐吗?

grouped_df = df.groupby(['Hours', 'Enough']).count().sort_values('Hours', ascending=False)
reduced_df = grouped_df[['Tired']]
total_count = reduced_df['Tired'].sum()
reduced_df['Tired_percentage'] = (reduced_df['Tired'] / total_count) * 100
reduced_df

我编写了以下几行,按“足够”和“小时”列对数据进行分组。

我希望“疲劳百分比”列显示每个“小时”的“是”和“否”的百分比。 但正如您在下面看到的,这个百分比返回不正确,例如,在第一行中它应该是 100%。我究竟做错了什么? grouped data frame

我尝试了上面描述的方法,并期望有一个百分比列显示正确的值

python pandas dataframe group-by analysis
1个回答
0
投票

您编写的代码正在计算每个 ['Hours', 'Enough'] 组相对于整个 DataFrame 中 'Tired' 列的总数的百分比。但是,您想要实现的是获取每个“小时”的“足够”的“是”和“否”值的百分比。为此,您应该计算每个“小时”的“疲劳”值的总和,然后计算每个 [“小时”、“足够”] 组相对于该总和的百分比。

以下是调整代码的方法:

# First, group by 'Hours' and 'Enough', and count the occurrences.
grouped_df = df.groupby(['Hours', 'Enough']).size().reset_index(name='count')

# Now, group by 'Hours' and sum the counts to get the total count for each 'Hour'.
hours_sum = grouped_df.groupby('Hours')['count'].sum().reset_index(name='hours_sum')

# Merge the two DataFrames on the 'Hours' column.
merged_df = pd.merge(grouped_df, hours_sum, on='Hours')

# Now, calculate the percentage.
merged_df['Tired_percentage'] = (merged_df['count'] / merged_df['hours_sum']) * 100

# If you want, you can sort the DataFrame.
sorted_df = merged_df.sort_values(['Hours', 'Tired_percentage'], ascending=[False, False])

# Display the DataFrame.
sorted_df
© www.soinside.com 2019 - 2024. All rights reserved.