代码之家  ›  专栏  ›  技术社区  ›  Paulo Henrique

Python列(百分比)

  •  0
  • Paulo Henrique  · 技术社区  · 2 年前

    在数据分析问题上,我需要别人的帮助。

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

    够了——你认为你睡得够吗? 小时数——平均而言,你一个工作日晚上睡多少小时? PhoneReach-你睡觉时把手机放在触手可及的地方吗? PhoneTime-你在入睡后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

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

    1 回复  |  直到 2 年前
        1
  •  0
  •   runroll3000    2 年前

    您编写的代码是计算每个[“小时”、“足够”]组相对于整个DataFrame中“疲劳”列总数的百分比。然而,您想要实现的是获得每个“小时”的“是”和“否”值的“足够”百分比。要做到这一点,您应该计算每个“小时”的“疲劳”值的总和,然后计算每个[“小时”、“足够”]组相对于该总和的百分比。

    以下是调整代码的方法:

    # 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