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

Python 使用函数计算数据帧(pandas)中列的频率,python,pandas,dataframe,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.IN

对于以下数据集:

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)

但是它不起作用。

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

尝试使用df.apply,传递pd.value\u计数:

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

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

print(foo(df, ['ADR', 'EF']))
这将完成以下工作:

def frequency(df,col_name): 
    count=df[col_name].value_counts()
    return count
在上面的函数中,您应该以字符串形式输入列名。例如:

frequency(df,'ADR') 

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

如果只有值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

OP希望计算所有列的值计数。您需要扩展您的解决方案。@cᴏʟᴅsᴘᴇᴇᴅ 从问题的措辞来看,我认为OP只对一个栏目感兴趣。无论如何,我更新了答案。是的,我想有选择地通过它。非常感谢。@Mary如果您传递任意数量或顺序的列,但将其作为列表传递,则这将起作用。很高兴我能帮忙。很好的申请~~@是的,我知道了。我还有一个问题。如果我想用另一个栏目将它们分组,那么函数应该是什么?@Wen-Oh-hey-there-buddy。
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