【问题标题】:making dataframe ready for bar plot using groupby and agg使用 groupby 和 agg 使数据框准备好进行条形图
【发布时间】:2016-02-14 13:06:12
【问题描述】:

假设我有这个数据框

d = {'group' : ('A', 'B', 'C', 'A', 'A', 'B') , 
     'T/F': (1, 0, 1, 0, 1, 1)}
df1 = pd.DataFrame(d)

看起来像这样

 T/F group
0    1     A
1    0     B
2    1     C
3    0     A
4    1     A
5    1     B

我想制作一个条形图,对每组 A、B 和 C 中有多少个 1 和多少个 0 进行排序。我的猜测是我需要首先将数据分组以使其准备好进行绘图,(请如果我错了,如果有更简单的方法,请纠正我)

我正在做的是这样的:

bardata = df1.groupby('group').agg({'T/F': lambda x: sum(x == 1)})

虽然这有效并且它计算我拥有的 1 的数量(或者如果我想要的 0)但它不能同时做这两个。例如它目前给出了

      T/F
group     
A        2
B        1
C        1

如果有另一列会很好地给出所有错误值的总和(在那里再添加一个 lambda 也无济于事,因为列名仍然是 T/F)。我想用这些数据制作堆积条形图,这样我就可以看到每组有多少个 1 和 0。

感谢所有帮助。

【问题讨论】:

    标签: python pandas dataframe bar-chart


    【解决方案1】:

    你已经很接近了。在您的 groupby 之后,选择感兴趣的列 (T/F) 并将字典传递给 agg 函数。

    bardata = df1.groupby('group')['T/F'].agg({'T': lambda x: sum(x == 1), 
                                               'F': lambda x: sum(x == 0)})
    
    >>> bardata
           T  F
    group      
    A      2  1
    B      1  1
    C      1  0
    

    【讨论】:

    • 我可以发誓我在发布之前尝试过,但它只会打印一列。可能是我错过了什么。感谢您的帮助。
    • 啊..我意识到我在做什么。您在 agg 函数之前有 ['T/F']。
    猜你喜欢
    • 2019-06-27
    • 2017-03-11
    • 2020-03-03
    • 2014-02-24
    • 1970-01-01
    • 1970-01-01
    • 2020-03-10
    • 2021-11-21
    • 1970-01-01
    相关资源
    最近更新 更多