Python—数据集值的比例

Python—数据集值的比例,python,pandas,function,loops,Python,Pandas,Function,Loops,我一直在尝试创建一个函数,该函数从给定数据帧的一部分值中返回一个数据帧 例如,在回答调查的一组客户中,56%是女性,44%是男性 这是我建立的功能: def proportion_to_the_whole_dataset(dataset,dataset_column): proportion_dataset = pd.DataFrame(columns=[dataset_column.name,'%']) for i in range(dataset_column.value_c

我一直在尝试创建一个函数,该函数从给定数据帧的一部分值中返回一个数据帧

例如,在回答调查的一组客户中,56%是女性,44%是男性

这是我建立的功能:

def proportion_to_the_whole_dataset(dataset,dataset_column):
    proportion_dataset = pd.DataFrame(columns=[dataset_column.name,'%'])
    for i in range(dataset_column.value_counts().index.size):
        for element in dataset_column.value_counts().index:
            proportion_dataset = pd.DataFrame({dataset_column.name: element,'%': round((dataset[dataset_column == element].size/dataset.size)*100,2)},index=[i])
        return proportion_dataset
然而,我得到的结果是:

性别%

0男44.0


我使用的循环中是否存在任何问题?

每次变量
比例\u数据集
时,您都会覆盖。您可以为每个循环追加结果,并像下面这样将其串联起来作为返回

def proportion_to_the_whole_dataset(dataset,dataset_column):
    proportion_dataset = pd.DataFrame(columns=[dataset_column.name,'%'])
    temp = []
    for i in range(dataset_column.value_counts().index.size):
        for element in dataset_column.value_counts().index:
            temp.append(pd.DataFrame({dataset_column.name: element,'%': round((dataset[dataset_column == element].size/dataset.size)*100,2)},index=[i]))
        return pd.concat(temp)
正如所建议的,你的方法并没有利用熊猫的力量。因此,更好的解决方案是:

def proportion(df, col):
    df = df[col].value_counts(normalize=True) * 100
    df = df.to_frame()
    df.reset_index(inplace=True)
    df.columns = [col, '%']
    return df

其中col是作为字符串分析的列名

您希望得到什么输出?“是吗?坦率地说,在《熊猫》中这样循环听起来完全是对图书馆的滥用。”物理学家完全同意。。但他问自己的循环出了什么问题,而不是另一种方法。。soYou从技术上回答了这个问题,这就是为什么我没有投反对票。但是你也没有给出首选的解决方案,这就是为什么我没有投票的原因。@Madpoistics better now?@Caio Garcia,如果这是你想要的,请接受答案