基于一个条件对一组数字进行随机迭代

2024-09-26 18:06:33 发布

您现在位置:Python中文网/ 问答频道 /正文

嗨,让我用一个例子来说明我的问题:

我有一个数据帧df和一个名为NorD的列。你知道吗

以及大量的数字(偏离者和中立者):

越轨者:

24, 13, 24

13, 24, 13

中性:

24, 24, 24



NorD

 N
 N
 N
 D
 N
 D
 N
 D
 N
 D

我想做的是创建3列:分别是“N”、“Size”、“Spacing”,并用一个异常块填充,在可用的异常块中随机选择,当列“NorD”=“D”,然而,当一个异常块被用来填充一个D两次时,它就不能再被使用了(因此每个异常块只能在整个数据帧中出现两次)。你知道吗

当“NorD”==N时,用中性卡盘(24,24,24)填充。你知道吗

期望结果:

NorD N Size Spacing

 N   24  24    24
 N   24  24    24
 N   24  24    24
 D   24  13    24
 N   24  24    24
 D   13  24    13
 N   24  24    24
 D   13  24    13
 N   24  24    24
 D   24  13    24

这是我现在对240行的数据帧所做的:

df["NorD"] = is already imported so no need to care about this just need to know the column exist

df["N"] = np.nan
df["Size"] = np.nan
df["Spacing"] = np.nan

卡住1#我要做的是在第一行等于N时用24填充第二行、第三行和第四行,但此代码不起作用=>

for i in range(240):
        if ['NorD'] == 'N':
            df.loc[i] = ['24','24','24']

卡住2:我甚至不知道如何解决这个问题如果你在第二、第三和第四栏遇到“D”,请填写两次,并且只填写两次下面的数字。=>

for i in range(240):
    if ['NorD'] == 'D':

        ##from here it is psuedocode 


13,13,24
13,24,13
24,24,13
etc (there are 48 d 24 chunks so each deviant chunk should appear twice)

更新: 卡滞1已通过以下代码解决:

for i in range(240):
    if df.loc[i,'NorD'] == 'N':
        df.loc[i,'N'] = 24
        df.loc[i,'Size'] = 24
        df.loc[i,'Space'] = 24

仍在努力解决第二个问题


Tags: 数据indfforsizeifisnp
1条回答
网友
1楼 · 发布于 2024-09-26 18:06:33

这是我问题的答案。在pydev slack上得到一些帮助谢谢你jkelly:

# You made the initial df above from random import shuffle

a_list_of_b_values = 
[   {       'N': 1,         'Size': 2,      'Space': 3  },
{       'N': 1,         'Size': 2,      'Space': 3  }, 
{       'N': 2,         'Size': 3,      'Space': 4  },  
{       'N': 2,         'Size': 3,      'Space': 4  },etc ...]

这个。。。意味着枚举所有必要的值两次

shuffle(a_list_of_b_values)

for i in range(240):
    if df.loc[i,'SorD'] == 'S':
        df.loc[i,'N'] = 24
        df.loc[i,'Size'] = 24
        df.loc[i,'Space'] = 24  

    elif d.loc[i, 'SorD'] == 'D':       
        data = a_list_of_b_values.pop()         
        df.loc[i,'N'] = data['N']
        df.loc[i,'Size'] = data['Size']
        df.loc[i,'Space'] = data['Space']

相关问题 更多 >

    热门问题