pandas 删除一个单元格并将列上移

pandas delete a cell and shift up the column

我正在使用 pandas 和 python。 我有一列,其中第一个值为零。 该列中还有其他零,但我也不想删除它们。 我想删除这个单元格并将列向上移动 1 个位置。 如果这很容易,我可以将第一个零作为一个空单元格,然后删除,但我找不到任何东西来删除一个特定的单元格并将列的其余部分向上移动。 到目前为止,我已经尝试了现有堆栈溢出和 quora plus github 等的帮助,但我看不到任何我正在寻找的东西。

我相信您首先需要 shift,然后替换最后一个 NaN 值:

df = pd.DataFrame({'A':list('abcdef'),
                   'B':[4,5,4,5,5,4],
                   'C':[7,8,9,4,2,3],
                   'D':[1,3,5,7,1,0],
                   'E':[5,3,6,9,2,4],
                   'F':list('aaabbb')})

print (df)
   A  B  C  D  E  F
0  a  4  7  1  5  a
1  b  5  8  3  3  a
2  c  4  9  5  6  a
3  d  5  4  7  9  b
4  e  5  2  1  2  b
5  f  4  3  0  4  b

如果没有 NaNs 仅使用 fillna 替换 NaN:

df['A'] = df['A'].shift(-1).fillna('AAA')
print (df)
     A  B  C  D  E  F
0    b  4  7  1  5  a
1    c  5  8  3  3  a
2    d  4  9  5  6  a
3    e  5  4  7  9  b
4    f  5  2  1  2  b
5  AAA  4  3  0  4  b

如果可能,列中有一些 NaN,然后通过 iloc, get_loc 函数 return 列的位置 A:

设置最后一个值
df['A'] = df['A'].shift(-1)
df.iloc[-1, df.columns.get_loc('A')] = 'AAA'
print (df)
     A  B  C  D  E  F
0    b  4  7  1  5  a
1    c  5  8  3  3  a
2    d  4  9  5  6  a
3    e  5  4  7  9  b
4    f  5  2  1  2  b
5  AAA  4  3  0  4  b