【问题标题】:Skip nan and shift elements in a pandas dataframe row [duplicate]跳过熊猫数据框行中的nan和shift元素[重复]
【发布时间】:2018-04-12 11:52:15
【问题描述】:

我有一个像这样的数据框 [![数据框看起来像这样][1]:https://i.stack.imgur.com/R7GmM.png 现在我想跳过 nan,以便数据向左移动,即 [![formatted dataframe 应该是这样的] [1]:https://i.stack.imgur.com/yGYIy.png

我无法通过 pandas 做到这一点。如果我有一个包含 100k 行的大型数据集,是否可以使用可扩展的解决方案?

[编辑]:这是数据和所需的输出:

#Original df
>>> df
   A    B    C    D
0  a  NaN    c  NaN
1  b  NaN    b    a
2  c  NaN  NaN    d
3  d    a    b    c

#Desired output:

   A  B  C  D
0  a  c      
1  b  b  a   
2  c  d      
3  d  a  b  c

【问题讨论】:

  • 请重新处理您的问题以包含示例。看起来好像您试图在帖子中放置图像,但它们没有出现。在任何情况下,将示例数据剪切并粘贴到您的问题正文中以生成minimal reproducible example总是比发布数据框的图像更好。
  • 我已经编辑了链接。请检查问题的链接。
  • 注意我已经编辑了您的问题以包含一个示例。以后,请尝试以类似的方式发布示例,使用数据框的屏幕截图并不容易,不会吸引很多人回答您的问题。

标签: python pandas dataframe


【解决方案1】:

这是一种方法:

从名为 df 的数据框开始:

   A    B    C    D
0  a  NaN    c  NaN
1  b  NaN    b    a
2  c  NaN  NaN    d
3  d    a    b    c

应用这些行:

shifted_df = df.apply(lambda x: pd.Series(x.dropna().values), axis=1).fillna('')
shifted_df.columns = df.columns

你会得到你的 shifted_df 数据框:

>>> shifted_df
   A  B  C  D
0  a  c      
1  b  b  a   
2  c  d      
3  d  a  b  c

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-08-07
    • 1970-01-01
    • 1970-01-01
    • 2021-01-17
    • 2018-11-11
    • 2017-10-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多