我使用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
但是它返回了以下错误,也许它不接受字符串索引
答案 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