用值填充列(熊猫)

Posted

技术标签:

【中文标题】用值填充列(熊猫)【英文标题】:Filling column with values (pandas) 【发布时间】:2021-03-18 23:05:49 【问题描述】:

我在使用 pandas 填充列中的值时遇到问题。我想添加应该描述客户年收入等级的字符串。我希望数据框长度的 20% 获得“最低”值,9% 的数据框应该获得“中下”等...我想创建一个列表并附加值,然后将其设置为该列的值,但随后我得到一个 ValueError 值长度 (5) 与索引长度 (500) 不匹配

list_of_lists = []
list_of_lists.append(int(0.2*len(df))*"Lowest")
list_of_lists.append(int(0.09*len(df))*"Lower Middle")
list_of_lists.append(int(0.5*len(df))*"Middle")
list_of_lists.append(int(0.12*len(df))*"Upper Middle")
list_of_lists.append(int(0.12*len(df))*"Highest")
df["Annual Income"] = list_of_lists

您知道什么是最好的方法吗?

提前致谢 最好的祝福 阿丽娜

【问题讨论】:

1. list_of_lists 是 5 个字符串的列表,但这些字符串是提供的字符串的重复('LowestLowestLowestLowest...')。而不是乘以字符串,而是乘以列表中的字符串:list_of_lists.append(int(0.2*len(df))*["Lowest"])。使用 list(flatten(list_of_lists)) 来展平列表 (from itertools import flatten)。 2. 这不是一个完整的解决方案:它会失败,因为新列表的大小与数据帧的大小不同,因为所有int(X*len(df)) 的总和不是相同的数据帧长度。 请阅读this。至少,我们需要复制/粘贴的样本数据,以及您希望输出的样子的样本。 【参考方案1】:

您可以使用numpy 进行加权选择。该方法有一个选择列表、要做出的选择的数量和概率。你可以生成这个然后做df['Annual Income'] = incomes

我已打印出数值计数,以便您查看总数。每次都会略有不同。

我还必须调整概率,使它们加起来为 100%

import pandas as pd
from numpy.random import choice
incomes = choice(['Lowest','Lower Middle','Middle','Upper Middle','Highest'], 500,
              p=[.2,.09,.49,.11,.11])

df= pd.DataFrame('Annual Income':incomes)


df.value_counts()

Annual Income
Middle           245
Lowest            87
Upper Middle      66
Highest           57
Lower Middle      45

【讨论】:

以上是关于用值填充列(熊猫)的主要内容,如果未能解决你的问题,请参考以下文章

熊猫用 min 函数填充列值

根据熊猫中的另一个列值有条件地填充列值

如何在熊猫数据框中仅填充选定列的空值? [复制]

用上一列中的值填充熊猫数据框中的“无”值

从多个字典填充熊猫数据框

如何根据另一列中的单元格值有条件地填充熊猫列