从datafram.iloc读取值太慢,并且在dataframe.values中存在问题



我使用 python,我有 35 000 行的数据,我需要通过循环更改值,但这需要太多时间

ps:我有按 succes_1、succes_2、succes_5、succes_7....suces_120 命名的列,所以我通过另一个循环获得列的名称,值取决于另一列

示例:

SK_1    Sk_2    Sk_5   ....   SK_120    Succes_1    Succes_2    ...   Succes_120
1        0       1             0          1            0                 0
1        1       0             1          2            1                 1
for i in range(len(data_jeux)):
    for d in range (len(succ_len)):
        ids = succ_len[d]
        if data_jeux['SK_%s' % ids][i] == 1:
             data_jeux.iloc[i]['Succes_%s' % ids]= 1+i 

我问是否有办法用我尝试的更快方式执行此问题:

data_jeux.values[i, ('Succes_%s' % ids)] = 1+i 

但它向我返回以下错误,也许它不接受字符串索引

您可以定义列,然后使用loc递增。不清楚您的列是否是自然排序的;如果不是,您可以将sorted与自定义函数一起使用。基于字符串的排序将导致'20'出现在'100'之前。

def splitter(x):
    return int(x.rsplit('_', maxsplit=1)[-1])
cols = df.columns
sk_cols = sorted(cols[cols.str.startswith('SK')], key=splitter)
succ_cols = sorted(cols[cols.str.startswith('Succes')], key=splitter)
df.loc[df[sk_cols] == 1, succ_cols] += 1

最新更新