我有以下测试日期帧:

| tag      | list                                                | Count |
| -------- | ----------------------------------------------------|-------|
| icecream | [['A',0.9],['B',0.6],['C',0.5],['D',0.3],['E',0.1]] |  5    |
| potato   | [['U',0.8],['V',0.7],['W',0.4],['X',0.3]]           |  4    |
| cheese   | [['I',0.2],['J',0.4]]                               |  2    |

我想随机抽样列表列,从列表的前4个列表中挑选任何3个.(就像[‘E’,0.1]甚至不考虑标签=冰淇淋).

该规则应该能够从列表中随机挑选3个列表.如果少于3个,则 Select 存在的任何一个并随机化.

每次结果都应该是随机的,因此需要为相同的输出设定种子:

| tag      | list                           | 
| -------- | -------------------------------|
| icecream | [['B',0.6],['C',0.5],['A',0.9]]|
| potato   | [['W',0.4],['X',0.3],['U',0.8]]|
| cheese   | [['J',0.4],['I',0.2]]          | 

这就是我try 过的:

data = [['icecream', [['A', 0.9],['B', 0.6],['C',0.5],['D',0.3],['E',0.1]]], 
        ['potato', [['U', 0.8],['V', 0.7],['W',0.4],['X',0.3]]],
        ['cheese',[['I',0.2],['J',0.4]]]]

df = pd.DataFrame(data, columns=['tag', 'list'])
df['Count'] = df['list'].str.len().sort_values( ascending=[False])
df
--

import random
item_top_3 =  []
find = 4
num = 3
for i in range(df.shape[0]):
    item_id = df["tag"].iloc[i]
    whole_list = df["list"].iloc[i]
    item_top_3.append([item_id, random.sample(whole_list[0:find], num)])

--
I get this error:
ValueError: Sample larger than population or is negative.

有谁能帮忙把它随机化.最初的DataFrame有超过50,000行,我想对任何规则进行随机化,比如明天有人可能想从列表的前20个元素中随机挑选5个项目,但它应该仍然有效.

推荐答案

使用结合random.sample的列表理解法:

import random

find = 4
num = 3
df['list'] = [random.sample(l[:find], k=min(num, len(l))) for l in df['list']]

输出:

        tag                            list  Count
0  icecream  [[C, 0.5], [B, 0.6], [D, 0.3]]      5
1    potato  [[V, 0.7], [U, 0.8], [X, 0.3]]      4
2    cheese            [[J, 0.4], [I, 0.2]]      2

Python相关问答推荐

为什么抓取的HTML与浏览器判断的元素不同?

Odoo 16使用NTFS使字段只读

UNIQUE约束失败:customuser. username

计算天数

Plotly Dash Creating Interactive Graph下拉列表

Tkinter菜单自发添加额外项目

使用Python从rotowire中抓取MLB每日阵容

下三角形掩码与seaborn clustermap bug

在输入行运行时停止代码

剪切间隔以添加特定日期

pysnmp—lextudio使用next()和getCmd()生成器导致TypeError:tuple对象不是迭代器''

使用Openpyxl从Excel中的折线图更改图表样式

如何在海上配对图中使某些标记周围的黑色边框

在Python中控制列表中的数据步长

如何从比较函数生成ngroup?

将相应的值从第2列合并到第1列(Pandas )

如何关联来自两个Pandas DataFrame列的列表项?

按列表分组到新列中

多个布尔条件的`jax.lax.cond`等效项

查找系统上安装的所有Python