计算DataFrameGroupBy对象列的频率(pandas)。[英] Calculating frequency of DataFrameGroupBy object columns (pandas)

本文是小编为大家收集整理的关于计算DataFrameGroupBy对象列的频率(pandas)。的处理方法,想解了计算DataFrameGroupBy对象列的频率(pandas)。的问题怎么解决?计算DataFrameGroupBy对象列的频率(pandas)。问题的解决办法?那么可以参考本文帮助大家快速定位并解决问题。

问题描述

对于以下数据集:

Index    ADR   EF   INF   SS    class   type
1         1     1    0     0     SRI     F
2         1     0    1     1     SRI     h
3         0     1    0     0     NRI     N
4         0     0    1     1     NRI     u
5         1     0    1     1     NRI     l

我需要首先根据"类"列(两组:SRI、NRI)中的值对数据进行分组,然后计算 ADR、EF、INF、SS 列的频率.这是我的代码:

 print (df.groupby("class").ADR.value_counts())
    print (df.groupby("class").EF.value_counts())
    print (df.groupby("class").INF.value_counts())
    print (df.groupby("class").SS.value_counts())

但我更喜欢把它写成一个函数.有什么建议吗?

推荐答案

这有点挑战性,因为您想对可变数量的列执行此操作.

你可以先用df.groupby,然后用df.agg:

In [1085]: df.groupby('class').agg(lambda x: [np.bincount(x)]).applymap(lambda x: x[0])
Out[1085]: 
          ADR      EF     INF      SS
class                                
NRI    [2, 1]  [2, 1]  [1, 2]  [1, 2]
SRI    [0, 2]  [1, 1]  [1, 1]  [1, 1]

同样,对于选择性聚合,一个接受列列表的函数可以:

def foo(df, type, columns):
    return df.groupby(type)[columns].agg(lambda x: [np.bincount(x)]).applymap(lambda x: x[0])

本文地址:https://www.itbaoku.cn/post/1727786.html