我有一个数据框,如下所示:

5.29559     NaN     2.38176     NaN     0.51521     NaN     0.04454     0.00000     None    None    None    None    None    None    None    None
0   NaN     NaN     NaN     NaN     0   NaN     NaN     0   NaN     NaN     0   2   None    None    None
4.32454     NaN     1.77600     NaN     0.04454     NaN     0.00000     None    None    None    None    None    None    None    None    None
0   NaN     NaN     NaN     NaN     0   NaN     NaN     0   NaN     NaN     2   None    None    None    None    

我正在try 通过删除所有NAN值并try 使当前数据框看起来如下所示来生成数据框:

5.29559     2.38176     0.51521     0.04454     0.00000     
      0           0           0           0           2         
4.32454     1.77600     0.04454     0.00000     
      0           0           0           2     

有人能帮帮忙吗? 我try 了dropna()方法,但无济于事.

推荐答案

让我们try 堆叠以消除NAN,然后重置每个级别的索引,最后再次取消堆叠:

(df.stack()
   .groupby(level=0)
   .apply(lambda df: df.reset_index(drop=True))
   .unstack())

         0        1        2        3    4
0  5.29559  2.38176  0.51521  0.04454  0.0
1  0.00000  0.00000  0.00000  0.00000  2.0
2  4.32454  1.77600  0.04454  0.00000  NaN
3  0.00000  0.00000  0.00000  2.00000  NaN

解释:

首先,堆叠以删除NAN

df.stack()

0  0     5.29559
   2     2.38176
   4     0.51521
   6     0.04454
   7     0.00000
1  0     0.00000
   5     0.00000
   8     0.00000
   11    0.00000
   12    2.00000
2  0     4.32454
   2     1.77600
   4     0.04454
   6     0.00000
3  0     0.00000
   5     0.00000
   8     0.00000
   11    2.00000 
dtype: float64

您会注意到索引的内部级别并不是单调增加的.让我们用groupby来解决这个问题.

_.groupby(level=0).apply(lambda df: df.reset_index(drop=True))

0  0    5.29559
   1    2.38176
   2    0.51521
   3    0.04454
   4    0.00000
1  0    0.00000
   1    0.00000
   2    0.00000
   3    0.00000
   4    2.00000
2  0    4.32454
   1    1.77600
   2    0.04454
   3    0.00000
3  0    0.00000
   1    0.00000
   2    0.00000
   3    2.00000
dtype: float64

现在我们把堆栈拆开

_.unstack()

         0        1        2        3    4
0  5.29559  2.38176  0.51521  0.04454  0.0
1  0.00000  0.00000  0.00000  0.00000  2.0
2  4.32454  1.77600  0.04454  0.00000  NaN
3  0.00000  0.00000  0.00000  2.00000  NaN

Python相关问答推荐

在Transformer中使用LabelEncoding的ML模型管道

如何使用矩阵在sklearn中同时对每个列执行matthews_corrcoef?

如何处理嵌套的SON?

如何在图片中找到这个化学测试条?OpenCV精明边缘检测不会绘制边界框

使用mySQL的SQlalchemy过滤重叠时间段

rame中不兼容的d类型

如何根据参数推断对象的返回类型?

按顺序合并2个词典列表

聚合具有重复元素的Python字典列表,并添加具有重复元素数量的新键

如果值发生变化,则列上的极性累积和

在pandas中使用group_by,但有条件

Python脚本使用蓝牙运行在Windows 11与raspberry pi4

在pandas/python中计数嵌套类别

在Python中使用yaml渲染(多行字符串)

OpenCV轮廓.很难找到给定图像的所需轮廓

Python日志(log)模块如何在将消息发送到父日志(log)记录器之前向消息添加类实例变量

Python Mercury离线安装

如何在Python中将超链接添加到PDF中每个页面的顶部?

使用np.fft.fft2和cv2.dft重现相位谱.为什么结果并不相似呢?

如何写一个polars birame到DuckDB