#python #pandas #for-loop
#python #pandas #для цикла
Вопрос:
У меня есть фрейм данных, содержащий более 200 столбцов фиктивной переменной:
Row1 Feature1 Feature2 Feature3 Feature4 Feature5
A 0 1 1 1 0
B 0 0 1 1 1
C 1 0 1 0 1
D 0 1 0 1 0
Я хочу выполнить итерацию для разделения каждой функции, чтобы создать дополнительные 3 фрейма данных, в которых df1 содержит только первую функцию, которая = 1 равна 1, и изменяет все последующие столбцы на 0, а df2 содержит только вторую функцию, которая = 1 равна 1, и изменяет все предыдущие и последующие столбцы на 0.
У меня есть коды создания для этого, но я подумал, что должны быть лучшие способы сделать это. Пожалуйста, помогите мне найти более эффективный способ решения этой проблемы. Спасибо!
Ниже приведен мой код:
for index, row in hcit1.iterrows():
for i in range(1,261):
title="feature" str(i)
if int(row[title])==1:
for j in range(i 1,261):
title2="feature" str(j)
hcit1.loc[index,title2]=0
else:
pass
for index, row in hcit2.iterrows():
for i in range(1,261):
title="feature" str(i)
if int(row[title])==1:
for j in range(i 1,261):
title2="feature" str(j)
if row[title2]==1:
for k in range(j 1,261):
title3="feature" str(k)
hcit1.loc[index,title3]=0
hcit1.loc[index,title]=0
else:
pass
for index, row in hcit3.iterrows():
for i in range(1,261):
title="feature" str(i)
if int(row[title])==1:
for j in range(i 1,261):
title2="feature" str(j)
if row[title2]==1:
for k in range(j 1,261):
title3="feature" str(k)
if row[title3]==1:
for l in range(k 1,261):
title4="feature" str(l)
hcit1.loc[index,title4]=0
hcit1.loc[index,title2]=0
hcit1.loc[index,title]=0
else:
pass
for index, row in hcit4.iterrows():
for i in range(1,261):
title="feature" str(i)
if int(row[title])==1:
for j in range(i 1,261):
title2="feature" str(j)
if row[title2]==1:
for k in range(j 1,261):
title3="feature" str(k)
if row[title3]==1:
for l in range(k 1,261):
title4="feature" str(l)
if row[title4]==1:
for m in range(l 1,261):
title5="feature" str(m)
hcit1.loc[index,title5]=0
hcit1.loc[index,title3]=0
hcit1.loc[index,title2]=0
hcit1.loc[index,title]=0
else:
pass
Комментарии:
1. Пожалуйста, отформатируйте код. Это очень сложно поддерживать. Особенно, когда это код python , где отступы очень важны.
2. Спасибо за предложения. Я все еще изучаю форматирование в Stackoverflow.
Ответ №1:
Здесь:
df1 = df[df['Feature1'] == 1]
df1.iloc[:, :] = 0
df1.loc[:, 'Feature1'] = 1
df2 = df[df['Feature2'] == 1]
df2.iloc[:, :] = 0
df2.loc[:, 'Feature2'] = 1
df3 = df[df['Feature2'] == 1]
df3.iloc[:, :] = 0
df3.loc[:, 'Feature3'] = 1
Это должно быть то, что вы ищете.