pandas 排序数据框包含空字段

polhcujo  于 2023-06-20  发布在  其他
关注(0)|答案(2)|浏览(83)

我有一个数据框架如下:

data = {'Test': [' ', ' ', 'K', ],
        'Name': ['A', 'B', 'B', 'B'],
        'value': ['D1', 'A1', ' ', 'C1'],
        'time': [227, 227, 227, 230]}
df = pd.DataFrame(data)
Test  Name value  time
0        A    D1    227
1        B    A1    227
2   K    B          227
3        B    C1    230

我想让df排序为:

Test  Name value  time
0        A    D1    227
1   K    B          227
2        B    A1    227
3        B    C1    230

我试过使用sort_values,但仍然无法解决。或者我应该在排序中为空字段' '(或NA)添加更多条件?

bvjxkvbb

bvjxkvbb1#

最好不要使用空字符串/空格来表示空单元格。使用由sort_values直接处理的NA/NaN:

out = (df.replace(' ', pd.NA)
         .sort_values(by=['Name', 'time', 'Test'])
       )

它相当于:

out = (df.replace(' ', pd.NA)
         .sort_values(by=['Name', 'time', 'Test'], na_position='last')
       )

输出:

Test Name value  time
0  <NA>    A    D1   227
2     K    B  <NA>   227
1  <NA>    B    A1   227
3  <NA>    B    C1   230
dojqjjoe

dojqjjoe2#

import pandas as pd

data = {'Test': [' ', ' ', 'K', ' '],
        'Name': ['A', 'B', 'B', 'B'],
        'value': ['D1', 'A1', ' ', 'C1'],
        'time': [227, 227, 227, 230]}
df = pd.DataFrame(data)

df["Test"] = df["Test"].replace(" ", "Zzzzz") #Replace whitespaces with zs which will sort them last
df = df.sort_values(by=["Name","time","Test"])
df["Test"] = df["Test"].replace("Zzzzz", " ") 

#   Test  Name value  time
# 0        A    D1    227
# 1   K    B          227
# 2        B    A1    227
# 3        B    C1    230

相关问题