在Python和Pandas中,如何迭代将多列中的虚拟变量从1更改为0?

2024-09-28 05:19:38 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,它有超过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

Tags: inforindexiftitlerangelocfeature
1条回答
网友
1楼 · 发布于 2024-09-28 05:19:38

此处:

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

那应该是你要找的

相关问题 更多 >

    热门问题