【问题标题】:Pandas python Random select values from a list colum by another column valuePandas python从另一个列值从列表列中随机选择值
【发布时间】:2020-01-26 13:14:47
【问题描述】:

我有一个数据框,其中一列包含列表值,另一列包含列表中的一项。我想通过canceled 列中的条件从id 列中选择值,然后使用所选值创建另一列C
取消的列是取消代码的数量。 我需要将 cancelled 更改为 int ,然后他们将 Id 列与取消的数量分开,然后从 Id 列中返回一个随机数。即说代码 11AS 我将从数组中随机选择 1 个 id 并创建另一行取消了 id。对于从 0 开始的代码 22AS,我不会对任何内容进行切片,因此我不会在新创建的列中返回任何值,因此这将下降到所有行。

code    canceled  id
xxx     [1.0]     [107385, 128281, 133015]
xxS     [0.0]     [108664, 110515, 113556]
ssD     [1.0]     [134798, 133499, 125396, 114298, 133915]
cvS     [0.0]     [107611]
eeS     [5.0]     [113472, 115236, 108586, 128043, 114106, 10796...
544W    [44.0]    [107650, 128014, 127763, 118036, 116247, 12802.

我试图循环和切片,但我无法得到我想要的。说px 是我的DataFrame。

for i in px['canceled']:
    print(px['id'].str.slice(stop=int(i[0])))

【问题讨论】:

  • 你好 Newton,欢迎来到 SO。我并没有真正关注您的数据框结构,您能否提供一个数据框的最小示例?
  • 您好,感谢您的快速回复,我已经更新了我的问题。提前致谢
  • 您能举例说明您的预期结果吗?抱歉,我很难回答这个问题。
  • 如果任何答案符合您的要求,请考虑将其勾选为正确。 1 的声望就足够了。我提醒你这一点,因为新人经常忘记这样做。见What should I do when someone answers my question? 话虽如此,欢迎SO

标签: python pandas list slice


【解决方案1】:

applyrandom.sample 一起使用怎么样

import random

px['C'] = px.apply(
    lambda datum : random.sample(
        datum.id, k=int(datum.canceled[0])
    ),
    axis = 1
)

可能返回(回想一下C这个列是随机生成的)

code    canceled       id                                         C
xxS     [1.0]          [107385, 128281, 133015]                   [128281]
xxxxS   [0.0]          [108664, 110515, 113556]                   []
ssOD    [1.0]          [134798, 133499, 125396, 114298, 133915]   [114298]
45AS    [0.0]          [107611]                                   []
...     ...            ...                                        ...


如果int(datum.canceled[0]) 返回的内容大于datum.id 的长度,您可以做的就是完全返回datum.id。如下
def random_codes_sampler(datum):
    ids = datum.id
    nbc = int(datum.canceled[0])
    if nbc >= len(ids):
        return ids
    return random.sample(ids, k=nbc)

px['C'] = px.apply(
    random_codes_sampler, axis = 1
)

【讨论】:

  • 这是你在问@Newtorn 吗?
  • 您好,感谢您的回复,但实际上取消的不是索引,它是每个代码取消订单的数量,所以我想根据取消的情况从 Id 列中切出任何随机 id。被取消的也可以有44个及以上的被取消
  • updates@Newtorn,是你要问的吗?
  • 如果我加载更多行,我会遇到一个问题。我有 4000 行 ValueError:('样本大于总体或为负','发生在索引 54')
  • 非常感谢这对我有用(现在仍在审查)。如果 cancelled 大于 id,那么我的报告有问题,但现在一切正常。谢谢
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-03-17
  • 2023-01-11
  • 1970-01-01
  • 1970-01-01
  • 2018-01-25
相关资源
最近更新 更多