簡體   English   中英

計算數據框 Python 中所有分類變量的頻率和頻率百分比

[英]Calculating Frequency and % of frequency for all categorical variables in a data frame Python

我是 python 的新手,我正在處理一項要求,列出分類列中的所有唯一值以及每個值的頻率和列中每個值的頻率百分比,並使用 for 循環在完整的數據集上執行它。 此外,我不確定是否必須使用 pd.Series 根據附加的屏幕截圖將數據附加到數據框中,因為列的長度因列中的唯一值而異。

感謝你的幫助。

下面是我嘗試解決的代碼,但我無法在其他列上鍛煉以獲得唯一值和頻率百分比並將其創建為數據框,以便我可以將其導出為 CSV

Count_df = []
for item in df.columns:
    Count_df_ = pd.DataFrame(df1[item].value_counts())
    Count_df.append(Count_df_)
Count_dfdf = pd.DataFrame(Count_df)
Count_dfdf
Count_dfdf.to_csv(path_or_buf = Output + '_' + 'Count_.csv')

預期的輸入和輸出如下,並附加為:

[輸入數據和預期輸出][1]

提前致謝

沒有魔法。 只需耐心地逐列附加輸出數據幀。

在這里,我假設單個.csv文件中有 4 列輸出。 根據個人工作經驗,這種格式比電子表格軟件的單獨文件更方便。 然而,在循環內也可以分離輸出。

代碼

import pandas as pd

# please provide copy-able sample data next time
df = pd.DataFrame(
    data={
        "Name": ["A", "B", "C", "C", "A", "F"],
        "col2": [True, False, False, False, False, True],
        "col3": [1, 2, 3, 1, 1, 3],
    }
)

# Construct an empty dataframe with convenient column order.
# The ordering can be adjusted later on.
df_ans = pd.DataFrame(
    data={
        "var_name": [],
        "var_count": [],
        "var_freq": [],
        "col_name": [],
    }
)

# process each column
for col in df.columns:

    # get variable name and count
    df_col_count = df[col].value_counts().to_frame().reset_index()
    # rename columns
    df_col_count.columns = ["var_name", "var_count"]

    # compute frequency
    df_col_count["var_freq"] = df_col_count["var_count"] / df_col_count["var_count"].sum()

    # append column name
    df_col_count["col_name"] = col

    # sort (optional)
    # (1) by name
    df_col_count.sort_values(by="var_name", inplace=True)
    # (2) by descending frequency
    # df_col_count.sort_values(by="var_freq", ascending=False, inplace=True)

    # append
    df_ans = df_ans.append(df_col_count)

    # For separated CSV output, output here (and "col_name" can be removed)
    #df_col_count.to_csv(f"/path/to/{col}_freq.csv")

# reorder columns
df_ans = df_ans[["col_name", "var_name", "var_count", "var_freq"]]
# reindex
df_ans.reset_index(drop=True, inplace=True)

# write csv
# df_ans.to_csv(f"/path/to/all_freq.csv")

輸出

# Each column (variable) is sorted by name.
df_ans   

Out[12]: 
  col_name var_name  var_count  var_freq
0     Name        A        2.0  0.333333
1     Name        B        1.0  0.166667
2     Name        C        2.0  0.333333
3     Name        F        1.0  0.166667
4     col2    False        4.0  0.666667
5     col2     True        2.0  0.333333
6     col3        1        3.0  0.500000
7     col3        2        1.0  0.166667
8     col3        3        2.0  0.333333

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM