首页 > 解决方案 > 检查列是否在列表中,如果不是则删除并将值添加到新列

问题描述

我有一个这样的数据库:

df = pd.DataFrame( { 
        "A" : [0,0,1,1,0,1] , 
        "B" : [1,0,0,1,1,0],
        "C" : [0,0,0,1,1,0],
        "D" : [1,1,0,0,0,1]} )

看起来像这样:

    A   B   C   D
0   0   1   0   1
1   0   0   0   1
2   1   0   0   0
3   1   1   1   0
4   0   1   1   0
5   1   0   0   1

我有一个我希望保留的列列表allowed_columns = ["A","B"]。这意味着我们摆脱了Cand D。但是,在删除列时,如果有值 1,我想在新列中注明lost。这就是我想要实现的目标:

    A   B   lost    
0   0   1   1   
1   0   0   1   
2   1   0   0   
3   1   1   1   
4   0   1   1   
5   1   0   1   

为了解决问题,我们可以假设C并且D不能同时具有值​​ 1。我怎样才能做到这一点?

标签: pythonpandas

解决方案


子集到允许的列,然后取你删除的所有内容的最大值df.columns.difference

df = (df[allowed_columns]
       .assign(lost=df[df.columns.difference(allowed_columns)].max(1)))

推荐阅读