Python 按顺序移动行

Python 按顺序移动行,python,pandas,Python,Pandas,我正在尝试转换中的值。具体地说,是在特定的值之后的行。对于下面的df,当上面的值为==“X”时,我想将行移到左侧 d = ({ 'A' : ['Foo','','Foo',''], 'B' : ['X','Bar','X','Bar'], 'C' : ['','Y','','Y'], }) df = pd.DataFrame(data=d) 输出: 我试过这个: b = ['X'] x = df.B=='X' df.loc[x, b] =

我正在尝试
转换
中的值。具体地说,是在特定的
值之后的
。对于下面的
df
,当上面的值为
==“X”
时,我想
移到左侧

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

df = pd.DataFrame(data=d)
输出:

我试过这个:

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
虽然这些
字符串
是相同的,但我的数据集是不同的
Foo
将是相同的,但是
X
后面的
字符串将有所不同。所以我不能只选择
Bar
shift
左键。我需要找到
下面
X
并向左移动的东西

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
IIUC

你能行

df.replace('',np.nan).apply(lambda x: sorted(x, key=pd.isnull), 1).fillna('')
Out[538]: 
     A  B C
0  Foo  X  
1  Bar  Y  
2  Foo  X  
3  Bar  Y  
你能行

df.replace('',np.nan).apply(lambda x: sorted(x, key=pd.isnull), 1).fillna('')
Out[538]: 
     A  B C
0  Foo  X  
1  Bar  Y  
2  Foo  X  
3  Bar  Y  

如果只想去掉空值,可以使用列表理解,然后将其馈送到
pd.DataFrame
构造函数:

res = pd.DataFrame([list(filter(None, row)) for row in df.values.tolist()],
                   columns=df.columns[:2])

print(res)

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

如果只想去掉空值,可以使用列表理解,然后将其馈送到
pd.DataFrame
构造函数:

res = pd.DataFrame([list(filter(None, row)) for row in df.values.tolist()],
                   columns=df.columns[:2])

print(res)

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

是否
X
仅在B列?是。它不在其他任何地方复制@RafaelC.Is
X
仅在B列?是的。它在其他任何地方都不会复制@RafaelC.在这里产生一系列列表?@RafaelC这里的列表是什么意思?我得到了一个
pd.series
list
,比如,
0[Foo,X,nan]1[Bar,Y,nan]2[Foo,X,nan]3[Foo,W,P]4[Bar,Y,nan]dtype:object
@RafaelC-idk为什么在这里有列表,但在我这一方,它会返回dataframe@RafaelC也许重新启动你的Jupter会在这里产生一系列列表?@RafaelC这里的列表是什么意思?我得到一个
pd.series
list
,比如,
0[Foo,X,nan]1[Bar,Y,nan]2[Foo,X,nan]3[Foo,W,P]4[Bar,Y,nan]dtype:object
@RafaelC idk为什么在这里有列表,但在我这边它返回dataframe@RafaelC也许重新启动你的jupter