首页 > 解决方案 > Python:在数据框中移动一个单元格

问题描述

我遇到了需要列移位的格式问题,可以通过以下方式说明:

df =                     
    A    B    C    D    E
0    foo    spam    egg    0    0
1    bar    egg    1    0.84    NaN
2    bar    egg    2    0.91    NaN
3    foo    spam    egg    3    0.14
4    foo    spam    egg    4    -0.76

对此:

    df =                    
    A    B    C    D    E
0    foo    spam    egg    0    0.00
1    bar    spam    egg    1    0.84
2    bar    spam    egg    2    0.91
3    foo    spam    egg    3    0.14
4    foo    spam    egg    4    -0.76

为此我做了以下修复:

columnShift = df.columns[-3:]
indexes = [i for i,x in enumerate(df.B) if x =='egg']

for i in indexes:
    for c in np.arange(1,len(columnShift)):
        df.loc[i,columnShift[-c]] = df.loc[i,columnShift[-(c+1)]]

它是功能性的,但感觉不优雅并且需要很长时间。因此,我想知道是否有更好的解决方案适用于更大的数据帧。

标签: pythondataframeformatting

解决方案


假设原始df是

df =                     
    A    B    C    D    E
0    foo    spam    egg    0    0
1    bar    egg    1    0.84    NaN
2    bar    egg    2    0.91    NaN
3    foo    spam    egg    3    0.14
4    foo    spam    egg    4    -0.76

下面的代码应该做你需要的:

new_cols = [cols[0], cols[-1]] + cols[1:-1].tolist()
part = df.iloc[1:3, :][new_cols]
df.iloc[1:3, :] = part.values

推荐阅读