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

时间:2019-01-31 11:01:35

标签: python pandas

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

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 

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

1 个答案:

答案 0 :(得分:1)

可以定义列和然后使用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