【问题标题】:pandas delete a cell and shift up the column熊猫删除一个单元格并向上移动列
【发布时间】:2017-11-19 17:15:40
【问题描述】:

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

【问题讨论】:

  • df['A'] = df['A'].shift(-1) 呢?
  • 如果您将列向上移动,您希望列中的最后一个值是什么?
  • 然后在最后一个值中得到 NaN。
  • @jezrael。非常感谢。我花了一天时间才让这个工作。现在我将最后一个元素作为空单元格,稍后我可以用零替换。再次感谢,让我也试试另一个,然后我会回复你。
  • @anvinder - 欢迎您!如果我的回答有帮助,请不要忘记 accept 它 - 单击答案旁边的复选标记 () 将其从灰色切换为已填充。您也可以投票 - 单击 @987654324 上方的小三角形@ 以上接受标记。谢谢。

标签: python pandas multiple-columns shift


【解决方案1】:

我相信你首先需要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

如果可能,列中的一些NaNs 然后通过iloc 设置最后一个值,get_loc 函数返回列的位置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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-12-04
    • 1970-01-01
    • 2020-04-18
    • 1970-01-01
    • 1970-01-01
    • 2020-11-07
    • 2017-12-18
    相关资源
    最近更新 更多