我可以返回带有总列的漂亮数据框中所有列的频率。
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
Run Code Online (Sandbox Code Playgroud)
我将循环放在一个函数中,但这仅返回第一列“计数”。
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
Run Code Online (Sandbox Code Playgroud)
有没有办法使用切片或其他方法来做到这一点,例如 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]
Run Code Online (Sandbox Code Playgroud)
您可以在 中以多种方式选择列pandas,例如通过切片或像在 中一样传递列列表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]
Run Code Online (Sandbox Code Playgroud)
编辑: “如果我想计算 的数量怎么办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]
Run Code Online (Sandbox Code Playgroud)