【问题标题】:Pandas count specific values in groupby results熊猫计算 groupby 结果中的特定值
【发布时间】:2018-10-02 05:08:40
【问题描述】:

我刚刚学习了如何将 Pandas DataFrame 与日期时间索引按日期分组。如何计算 groupby 每天返回的特定值(“通过”或“失败”)的数量?

我的目标是计算每日产量:产量 = passed_count/(passed_count + failed_count)。

import pandas as pd
import random

data = [random.choice(['Passed','Failed']) for i in range(100)]
times = pd.date_range('20180101',freq='3H',periods=100)

df = pd.DataFrame({'A':data},index=times)
group = df.groupby(pd.Grouper(freq='1D'))

【问题讨论】:

    标签: python pandas


    【解决方案1】:

    我认为你需要GroupBy.sizeSeriesGroupBy.value_counts,用unstack 重塑,最后除以sum

    np.random.seed(142)
    
    data = np.random.choice(['Passed','Failed'], size=100)
    times = pd.date_range('20180101',freq='3H',periods=100)
    
    df = pd.DataFrame({'A':data},index=times)
    #print (df)
    

    df1 = df.groupby([pd.Grouper(freq='1D'), 'A']).size().unstack(fill_value=0)
    #alternative 
    #df1 = df.groupby(pd.Grouper(freq='1D'))['A'].value_counts().unstack(fill_value=0)
    df1['new'] = df1['Passed'].div(df1.sum(axis=1))
    #alternative
    #df1['new'] = df1['Passed'].div(df1['Passed'].add(df1['Failed']))
    
    print (df1)
    A           Failed  Passed    new
    2018-01-01       5       3  0.375
    2018-01-02       5       3  0.375
    2018-01-03       4       4  0.500
    2018-01-04       4       4  0.500
    2018-01-05       4       4  0.500
    2018-01-06       3       5  0.625
    2018-01-07       4       4  0.500
    2018-01-08       5       3  0.375
    2018-01-09       4       4  0.500
    2018-01-10       4       4  0.500
    2018-01-11       4       4  0.500
    2018-01-12       7       1  0.125
    2018-01-13       0       4  1.000
    

    【讨论】:

    • 谢谢!如何从 df1 结果中提取一行? df1['2018-01-13'] 抛出 KeyError。
    • @stephenb - 你需要loc,比如print (df1.loc['2018-01-13'])
    猜你喜欢
    • 2020-09-28
    • 1970-01-01
    • 2020-09-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-04-18
    • 2014-02-13
    • 1970-01-01
    相关资源
    最近更新 更多