对于以下数据集:
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)
但它不起作用。
答案 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。