gpt4 book ai didi

python - Pandas 嵌套排序和 NaN

转载 作者:太空狗 更新时间:2023-10-29 20:30:45 24 4
gpt4 key购买 nike

我正在尝试了解 DataFrame.sort 的预期行为在具有 NaN 值的列上。

给定这个 DataFrame:

In [36]: df
Out[36]:
a b
0 1 9
1 2 NaN
2 NaN 5
3 1 2
4 6 5
5 8 4
6 4 5

如预期的那样,使用一列进行排序会将 NaN 放在末尾:

In [37]: df.sort(columns="a")
Out[37]:
a b
0 1 9
3 1 2
1 2 NaN
6 4 5
4 6 5
5 8 4
2 NaN 5

但嵌套排序并不像我预期的那样,导致 NaN 未排序:

In [38]: df.sort(columns=["a","b"])
Out[38]:
a b
3 1 2
0 1 9
1 2 NaN
2 NaN 5
6 4 5
4 6 5
5 8 4

有没有办法确保嵌套排序中的 NaN 出现在每一列的末尾?

最佳答案

在 Pandas 中修复之前,这就是我用于满足我的需要的排序,具有原始 DataFrame.sort 函数的一部分功能。这仅适用于数值:

def dataframe_sort(df, columns, ascending=True):
a = np.array(df[columns])

# ascending/descending array - -1 if descending, 1 if ascending
if isinstance(ascending, bool):
ascending = len(columns) * [ascending]
ascending = map(lambda x: x and 1 or -1, ascending)

ind = np.lexsort([ascending[i] * a[:, i] for i in reversed(range(len(columns)))])
return df.iloc[[ind]]

使用示例:

In [4]: df
Out[4]:
a b c
10 1 9 7
11 NaN NaN 1
12 2 NaN 6
13 NaN 5 6
14 1 2 6
15 6 5 NaN
16 8 4 4
17 4 5 3

In [5]: dataframe_sort(df, ['a', 'c'], False)
Out[5]:
a b c
16 8 4 4
15 6 5 NaN
17 4 5 3
12 2 NaN 6
10 1 9 7
14 1 2 6
13 NaN 5 6
11 NaN NaN 1

In [6]: dataframe_sort(df, ['b', 'a'], [False, True])
Out[6]:
a b c
10 1 9 7
17 4 5 3
15 6 5 NaN
13 NaN 5 6
16 8 4 4
14 1 2 6
12 2 NaN 6
11 NaN NaN 1

关于python - Pandas 嵌套排序和 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17126500/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com