[英]Pandas/Python: Store values of columns into list based on value in another column
[英]Pandas python Random select values from a list colum by another column value
我有一个数据框,其中一列包含列表值,另一列包含列表中的一项。 我想通过canceled
列中的条件从列id
中取出值 select 然后使用所选值制作另一列C
。
取消的列是取消代码的数量。 我需要将 cancelled 更改为 int,然后他们将 Id 列与取消的数量切片,然后从 Id 列中返回一个随机数。 即说代码 11AS 我将从数组中随机选择 1 个 id 并创建另一行取消了 id。 对于从 0 开始的代码 22AS,我不会对任何内容进行切片,因此我不会在新创建的列中返回任何值,因此这会将 go 降至所有行。
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])))
将apply
与random.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 )
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.