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