删除列,但保留特定值pandas df

时间:2018-08-01 00:27:28

标签: python pandas dataframe

我确定这是在某处,但我似乎找不到。我正在尝试删除或选择columns中的指定pandas df。但是我想保留某些值或从删除的strings中删除columns

对于下面的df,我想将'Big','Cat'保留在Col B,C中,但删除其他所有内容。

import pandas as pd

d = ({
    'A' : ['A','Keep','A','Value'],           
    'B' : ['Big','X','Big','Y'],
    'C' : ['Cat','X','Cat','Y'],
    })

df = pd.DataFrame(data=d)

如果执行以下任一操作,则只会选择该行。

Big = df[df['B'] == 'Big']
Cat = df[df['C'] == 'Cat']

我的预期输出是:

       A    B    C
0      A  Big  Cat
1   Keep          
2      A  Big  Cat
3  Value 

我需要类似x = df[df['B','C'] != 'Big','Cat']

5 个答案:

答案 0 :(得分:2)

IIUC

更新

    def min(self):
       while self.left:
           self.root = self.left
    return self.root

    def max(self):
        while self.right:
            self.root = self.right
    return self.value

    def valid(self):
        min = min(self.left)
        max = max(self.right)

        if self.root > min and self.root < max:
            return True

答案 1 :(得分:2)

似乎您只想保留一些值,并在后面加上空字符串

使用@Module class FragmentModule(val fragment : Fragment) { @Provides fun provideContext(): Context = fragment.context!! }

np.where

使用keeps = ['Big', 'Cat'] df['B'] = np.where(df.B.isin(keeps), df.B, '') df['C'] = np.where(df.C.isin(keeps), df.C, '') A B C 0 A Big Cat 1 Keep 2 A Big Cat 3 Value

的另一种解决方案
df.where

答案 2 :(得分:1)

您可以通过NumPy和np.ndarray.all过滤组合列:

mask = (df[['B', 'C']].values != ['Big', 'Cat']).all(1)

df.loc[mask, ['B', 'C']] = ''

print(df)

       A    B    C
0      A  Big  Cat
1   Keep          
2      A  Big  Cat
3  Value          

答案 3 :(得分:1)

或者这个:

df[['B','C']]=df[['B','C']].apply(lambda row: row if row.tolist()==['Big','Cat'] else ['',''],axis=1)
print(df)

输出:

       A    B    C
0      A  Big  Cat
1   Keep          
2      A  Big  Cat
3  Value          

答案 4 :(得分:0)

也许是一个简洁的版本:

df.loc[df['B'] != 'Big', 'B'] = ''
df.loc[df['C'] != 'Cat', 'C'] = ''
print(df)

输出:

       A    B    C
0      A  Big  Cat
1   Keep          
2      A  Big  Cat
3  Value     
相关问题