我使用 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