使用函数计算数据帧(pandas)中列的频率

时间:2017-07-27 18:45:37

标签: python pandas dataframe

对于以下数据集:

Index    ADR   EF   INF   SS
1         1     1    0     0
2         1     0    1     1
3         0     1    0     0
4         0     0    1     1
5         1     0    1     1

我要计算每列的频率。这是我的代码:

df.ADR.value_counts()
df.EF.value_counts()
df.INF.value_counts()
df.SS.value_counts()

如何通过编写函数来完成它,而不是重复每列的代码?我试过这个:

def frequency (df, *arg): 
    count =df.arg.value_counts()
    return (count)

但它不起作用。

3 个答案:

答案 0 :(得分:3)

假设您想要计算所有列的频率,而不是有选择地,我不建议使用自定义函数。

尝试使用df.apply,传递pd.value_counts

In [1048]: df.apply(pd.value_counts, axis=0)
Out[1048]: 
   ADR  EF  INF  SS
0    2   3    2   2
1    3   2    3   3

如果要有选择地计算,可以将列列表传递给函数:

def foo(df, columns):
    return df[columns].apply(pd.value_counts, axis=0)

print(foo(df, ['ADR', 'EF']))

答案 1 :(得分:3)

如果您只有值0和1

Freq=pd.concat([(df==0).sum(),(df==1).sum()],axis=1)
Out[62]: 
       0  1
Index  0  1
ADR    2  3
EF     3  2
INF    2  3
SS     2  3

答案 2 :(得分:2)

这将完成这项工作:

def frequency(df,col_name): 
    count=df[col_name].value_counts()
    return count

在上面的函数中,您应该将列名称作为字符串输入。例如:

frequency(df,'ADR') 

如果你想查找所有列的计数,那么最好按@cᴏʟᴅsᴘᴇᴇᴅ的答案中的建议使用df.apply。