如何删除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
答案 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