我有一个长度约为12000的array.另外,我在DataFrame中有一列提供了类似2,3,7,3,2,7...的值.该列的长度为48,这些值的总和为36.

我想要分布值,这意味着12000长度的数组是按特定的每个值分布的.例如,该列中的第一个值(=2)获得它自己的12000*(2/36)数组(可能是[0.3,0.6,0.3]),第二个值(=3)获得它的12000*(3/36)数组,它的值在第一个值(类似于[0.5,0.1,0.9,0.4])之后继续,依此类推.

推荐答案

import pandas as pd
import numpy as np


# mock some data
a = np.random.random(12000)
df = pd.DataFrame({'col': np.random.randint(1, 5, 48)})

indices = (len(a) * df.col.to_numpy() / sum(df.col)).cumsum()
indices = np.concatenate(([0], indices)).round().astype(int)
res = []
for s, e in zip(indices[:-1], indices[1:]):
    res.append(a[round(s):round(e)])

# some tests
target_pcts = df.col.to_numpy() / sum(df.col)
realized_pcts = np.array([len(sl) / len(a) for sl in res])
diffs = target_pcts / realized_pcts
assert 0.99 < np.min(diffs) and np.max(diffs) < 1.01
assert all(np.concatenate([*res]) == a)

Python相关问答推荐

如何使用html从excel中提取条件格式规则列表?

如何使用根据其他值相似的列从列表中获取的中间值填充空NaN数据

如何过滤包含2个指定子字符串的收件箱列名?

数据抓取失败:寻求帮助

pyscript中的压痕问题

计算每个IP的平均值

创建可序列化数据模型的最佳方法

计算分布的标准差

如何保持服务器发送的事件连接活动?

如何更新pandas DataFrame上列标题的de值?

如何在Great Table中处理inf和nans

Odoo16:模板中使用的docs变量在哪里定义?

如何按row_id/row_number过滤数据帧

使用SQLAlchemy从多线程Python应用程序在postgr中插入多行的最佳方法是什么?'

浏览超过10k页获取数据,解析:欧洲搜索服务:从欧盟站点收集机会的微小刮刀&

遍历列表列表,然后创建数据帧

是否将列表分割为2?

使代码更快地解决哪个字母代表给定公式中的哪个数字

判断字典键、值对是否满足用户定义的搜索条件

如何让doctest在mkdocs的标记代码块中运行示例?