python - 返回所有或特定列的频率计数的函数
问题描述
我可以在一个带有总列的漂亮数据框中返回所有列的频率。
for column in df:
df.groupby(column).size().reset_index(name="total")
Count total
0 1 423
1 2 488
2 3 454
3 4 408
4 5 343
Precipitation total
0 Fine 7490
1 Fog 23
2 Other 51
3 Raining 808
Month total
0 1 717
1 2 648
2 3 710
3 4 701
我将循环放在一个函数中,但这仅返回第一列“Count”。
def count_all_columns_freq(dataframe_x):
for column in dataframe_x:
return dataframe_x.groupby(column).size().reset_index(name="total")
count_all_columns_freq(df)
Count total
0 1 423
1 2 488
2 3 454
3 4 408
4 5 343
有没有办法使用切片或其他方法来做到这一点,例如for column in dataframe_x[1:]:
解决方案
根据您的评论,您只想返回一个数据框列表:
def count_all_columns_freq(df):
return [df.groupby(column).size().reset_index(name="total")
for column in df]
您可以通过多种方式选择 in 中的列pandas
,例如通过切片或传递列列表(如 in )df[['colA', 'colB']]
。您无需为此更改功能。
就个人而言,我会返回一本字典:
def frequency_dict(df):
return {column: df.groupby(column).size()
for column in df}
# so that I could use it like this:
freq = frequency_dict(df)
freq['someColumn'].loc[value]
编辑: “如果我想数数NaN
怎么办?”
在这种情况下,您可以传递dropna=False
给groupby
(这适用于pandas >= 1.1.0
):
def count_all_columns_freq(df):
return [df.groupby(column, dropna=False).size().reset_index(name="total")
for column in df]
推荐阅读
- python - 快速执行 def pair_sum() 的方法
- postgresql - PostgreSQL CTE 的一般并行性
- ruby - 来自 ruby 哈希的嵌套 json
- javascript - Webdriver.io 比较器运算符
- c - C宏扩展成多个函数定义
- python - neo4j 密码设置到 numpy 数组中的每个边缘属性
- python - SGDRegressor 不接受稀疏矩阵列表
- autodesk-forge - 衍生 API 未返回 Properties.db 文件
- jquery - jQuery - 如何让结果覆盖,而不是重复
- go - Golang Base64 到 Hex 转换