如何对pandas数据帧进行排序按升序对一行中的所有列值进行排序,并首先保留NaN值
示例数据帧是
2018-07-01 2018-07-02 2018-07-03 2018-07-04
cell_name
1002_NUc_Marathalli_7 0.734 0.550 NaN 0.481
1002_NUc_Marathalli_8 1.338 1.220 0.911 0.601
1002_NUc_Marathalli_9 0.330 1.180 0.754 0.631
1003_IU2_Munnekolalu_7 0.628 0.479 0.988 0.694
1003_IU2_Munnekolalu_8 5.327 6.831 8.387 9.428
输出应该在
^{pr2}$我可以使用以下方法创建另一个数据帧:
df1 = pd.DataFrame(np.sort(df.values,axis=1), index=df.index, columns=df.columns)
但是这里的nan
值在行的末尾。我希望在第一个值中使用nan
值
您可以使用
key
参数对数据帧行进行排序,以首先保留NaNs
:说明
为了了解
^{pr2}$sorted
在这种情况下的工作方式,让我们举个例子:Sorted接受一个
key
参数,该参数可用于定义一个函数,在实际排序发生之前,使用该函数可以转换数据收集。在那么在这种情况下有什么意义呢?理想的情况是有一些标准,根据这些标准我们可以确定序列中是否存在
np.nan
,并使这些情况排在第一位。如何转换数据以便以后sorted
可以实现这一点?在可以做的是为列表中的每一项添加一个额外的字段,该字段也将被用于对列表进行排序。假设我们有:
所以本质上是一个标识符,用于判断是否每个元素上都是
NaN
。现在我们要做的是:sorted
所做的是使用每个tuple
中的两个项目进行排序,因此优先排序第一个元素(因此以0
开头的元组排在第一个元素之前),其余的元素按第二个项排序,因为第一个元素是1
。那么,有什么办法可以达到这个目的呢?在如果将上面的
lambda
表达式重写为列表理解,它将等效于:注意,tese布尔值已经足够了,因为它们被解释为},这将在本例中给出所需的顺序。如果我们这样做:
True==1
和{这可以在
key
参数中实现为lambda
或匿名函数,如下所示:在上面的例子中,会给出:
您可以使用
fillna(float('-inf'))
和replace
:相关问题 更多 >
编程相关推荐