当前位置: 首页 > 面试题库 >

在pandas DataFrame中将非空单元格移到左侧

高夜洛
2023-03-14
问题内容

假设我有以下形式的数据

Name    h1    h2    h3    h4
A       1     nan   2     3
B       nan   nan   1     3
C       1     3     2     nan

我想将所有非南单元格移到左侧(或在新列中收集所有非南数据),同时保留从左到右的顺序,

Name    h1    h2    h3    h4
A       1     2     3     nan
B       1     3     nan   nan
C       1     3     2     nan

我当然可以逐行这样做。但是我希望知道是否还有其他方法可以改善性能。


问题答案:

这是我所做的:

我将您的数据框拆开成更长的格式,然后按名称列分组。在每个组中,我放下NaN,然后​​重新索引到以h4为底的完整h1,从而在右侧重新创建NaN。

from io import StringIO
import pandas

def defragment(x):
    values = x.dropna().values
    return pandas.Series(values, index=df.columns[:len(values)])

datastring = StringIO("""\
Name    h1    h2    h3    h4
A       1     nan   2     3
B       nan   nan   1     3
C       1     3     2     nan""")

df = pandas.read_table(datastring, sep='\s+').set_index('Name')
long_index = pandas.MultiIndex.from_product([df.index, df.columns])

print(
    df.stack()
      .groupby(level='Name')
      .apply(defragment)
      .reindex(long_index)  
      .unstack()  
)

所以我得到:

   h1  h2  h3  h4
A   1   2   3 NaN
B   1   3 NaN NaN
C   1   3   2 NaN


 类似资料:
  • 总结: 在我的桌面应用程序中,我加载一个Jtable,当处于编辑模式时,如果我按选项卡,我需要将单元格的焦点放在下一个单元格上。 问题:当我编辑单元格的值,然后按Tab键时,焦点丢失。我在网上做了一些搜索,发现这是因为在每个选项卡上按Jtable会重新加载自己。 可能的解决方案我正在考虑的一个解决方案是获取我正在处理的单元格的索引,在全局变量中也是如此,然后按Tab键可以获取下一个单元格的索引,并

  • 我正在iOS上学习UITableview,并在线学习一门课程。我得到的表格显示的很好,但我的细胞上的图像不是一直在左边(而讲师的图像是)。以下是相关单元格的屏幕截图: 我不想要那个间隙,我想要图像定位在细胞的边缘,一直到左边。我做了一些研究,苹果似乎已经改变了ios6和ios7之间电池的默认外观,所以现在电池中的图像在左边显示了一点间隙。为了摆脱它,我尝试了UIEdgeInsets: 这是行不通的

  • 问题内容: 摘要: 在我的桌面应用程序中,我加载了一个Jtable,并且在编辑模式下(如果我按Tab键)我需要将单元格的焦点放在下一个单元格上。 问题: 当我编辑单元格的值,然后按Tab时,焦点丢失。我在网上做了一些搜索,发现发生这种情况是因为在每个Tab上按下Jtable都会重新加载自身。 可能的解决 方案我想到的一个解决方案是获取正在使用的单元格的索引,将其与全局变量相同,然后在Tab键上按一

  • 我正在尝试使用Java中的Apache Poi将一些结果写入excel文件。我将结果存储在String变量中,然后在data.put调用中使用这些变量,前两个可以正常工作,但第三个导致空白单元格。当我打印到system.out.println()时,它显示良好? //创建空白工作簿XSSFWorkbook workbook=new XSSFWorkbook(); 子节点名称:#text 子节点文本

  • 问题内容: 从这样的表中: 如何在和列之间选择第一个非null值,并将其放入自己的字段中,这样输出将是: 问题答案: 您基本上是在描述函数: https://www.postgresql.org/docs/9.6/static/functions- conditional.html 在您的情况下: