【问题标题】:Python - proportion of values of a datasetPython - 数据集值的比例
【发布时间】:2021-06-26 08:39:06
【问题描述】:

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

例如,在回复调查的一组客户中,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

我使用的循环有什么问题吗?

【问题讨论】:

  • 你期望什么输出?对吗?

标签: python pandas function loops


【解决方案1】:

每次您的变量proportion_dataset 都会被覆盖。您可以为每个循环附加您的结果并将其连接起来作为回报。

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)

正如建议的那样,您的方法没有利用 pandas 的力量。因此,更好的解决方案是:

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 是您作为字符串分析的列名

【讨论】:

  • 坦率地说,在 pandas 中这样循环听起来完全是对库的滥用。
  • @MadPhysicist 完全同意.. 但他问他的循环出了什么问题,而不是不同的方法.. 所以
  • 您从技术上回答了这个问题,这就是我没有投反对票的原因。但是您也没有显示首选的解决方案,这就是我没有投票的原因。
  • @MadPhysicist 现在好点了吗?
  • @Caio Garcia,如果这是您要找的,请接受答案
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2017-03-26
  • 1970-01-01
  • 1970-01-01
  • 2020-03-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多