首页 > 解决方案 > 在熊猫df中移动行

问题描述

我正在尝试shiftpandas df. 具体来说,rows即遵循特定的value. 对于下面的,当上面的值为 时,df我想向左。shiftrow== 'X'

d = ({
    'A' : ['Foo','','Foo',''],           
    'B' : ['X','Bar','X','Bar'],
    'C' : ['','Y','','Y'],
    })

df = pd.DataFrame(data=d)

出去:

     A    B  C
0  Foo    X   
1       Bar  Y
2  Foo    X   
3       Bar  Y

我试过这个:

b = ['X']
x = df.B=='X'
df.loc[x, b] = df.loc[x, b].apply(lambda x: x.shift(-1), axis=1)

预期输出:

     A  B C
0  Foo  X  
1  Bar  Y  
2  Foo  X  
3  Bar  Y

虽然这些strings是相同的,但我的数据集会有所不同。Foo将是相同的string,但随后X会有所不同。所以我不能只是选择Barshift row离开。我需要一些能找到row下面X并左移的东西

标签: pythonpandas

解决方案


国际大学联盟

s = (df == 'X').any(1)
idx_to_change = s[s].index+1
df.loc[idx_to_change,:] = df.loc[idx_to_change].shift(-1,axis=1)

df.fillna('')

    A   B   C
0   Foo X   
1   Bar Y
2   Foo X   
3   Bar Y

推荐阅读