如何将列表中的值分配给熊猫数据框并控制每个列表元素在数据框中的分布/频率

Posted

技术标签:

【中文标题】如何将列表中的值分配给熊猫数据框并控制每个列表元素在数据框中的分布/频率【英文标题】:How to assign values from a list to a pandas dataframe and control the distribution/frequency each list element has in the dataframe 【发布时间】:2020-09-08 12:08:40 【问题描述】:

我正在构建一个数据框,需要将定义列表中的值分配给数据框中的新列。我找到了一个答案,它提供了一种将列表中的元素随机分配到数据框中的新列的方法 (How to assign random values from a list to a column in a pandas dataframe?)。

但我希望能够通过分配出现频率或其他方法来控制每个列表元素在数据框中出现的次数,从而控制列表中元素在新数据框中的分布。

例如,如果我有一个列表 my_list = [50, 40, 30, 20, 10] 我怎么能说对于具有 n 行数的数据框 (df) 分配 50 到 10% 的行,40到 20%、30 到 30%、20 到 35% 和 10 到 5% 的行。

欢迎使用任何其他方法来控制列表元素的分布,以上是一个简单的解释,以说明一种能够控制频率的方法可能看起来如何。

【问题讨论】:

【参考方案1】:

您可以使用numpy.random 中的choice 函数,提供概率分布。

>>> a = np.random.choice([50, 40, 30, 20, 10], size=100, p=[0.1, 0.2, 0.3, 0.35, 0.05])
>>> pd.Series(a).value_counts().sort_index(ascending=False)
50     9
40    25
30    19
20    38
10     9
dtype: int64

只需将所需大小放入size 参数(数据帧的长度)

【讨论】:

所以 'p=...' 参数是我所缺少的。我不熟悉 np.random.choice 函数,可能应该进一步探索一下。感谢您的回答!

以上是关于如何将列表中的值分配给熊猫数据框并控制每个列表元素在数据框中的分布/频率的主要内容,如果未能解决你的问题,请参考以下文章

如何将包含数组中的值的熊猫列扩展到多列?

如何将整个列表分配给熊猫数据框的每一行

如何将每行列表中的元素与熊猫匹配

在 Kdb 中,如何将每个符号列表分配给值列表

如何将列表内列表的值分配给列表内另一个列表的值(python)?

将列表作为大熊猫中的行附加数据框