删除和移动熊猫df中的值

时间:2018-08-01 07:28:22

标签: python pandas dataframe

如何删除shift中的特定值并pandas df。对于下面的df,我想删除string 'Remove'和2个相邻的值,然后删除shift下一个row

import pandas as pd

d = ({
    'A' : ['X','Y','X','X','Y'],           
    'B' : ['Remove','A','X','Remove','A'],
    'C' : ['stri','Big','Y','st','Big'],
    'D' : ['ng','Cat','X','ring','Cat'],          
    })

df = pd.DataFrame(data = d)

出局:

   A       B    C    D
0  X  Remove  stri  ng
1  Y       A  Big  Cat
2  X       X    Y    X
3  X  Remove  st  ring
4  Y       A  Big  Cat

我用过df['B'] = df['B'].shift(-1),但这只会删除第一个值。

我的预期输出是:

   A  B    C    D
0  X  A  Big  Cat
1  Y             
2  X  X    Y    X
3  X  A  Big  Cat
4  Y     

1 个答案:

答案 0 :(得分:1)

使用:

cols  = ['B','C','D']
m = (df['B'] == 'Remove')
#set empty string to rows with Remove
df.loc[m, cols] = ''

#chain 2 boolean mask for possible shift up
mask = m | m.shift()
df.loc[mask, cols]  = df.loc[mask, cols].shift(-1)

#last replace NaNs by empty strings
df = df.fillna('')
print (df)
   A  B    C    D
0  X  A  Big  Cat
1  Y             
2  X  X    Y    X
3  X  A  Big  Cat
4  Y