在间隔列上对 DataFrame 进行排序
Sort DataFrame on column of intervals
我的输出如下所示:
binnedb Proba-A Proba-B Esperance-A Esperance-B
0 (0.0101, 0.0202] 0.547826 0.539130 0.007817 0.007693
1 (0.0302, 0.0402] 0.547826 0.539130 0.005963 0.005854
2 (0.0201, 0.0302] 0.547826 0.539130 0.008360 0.008227
我想做的是根据binnedb列(也将按升序排序)对df进行升序排序。如果您不明白这个问题,请告诉我。这就是我到目前为止所尝试的:df.sort_values(by=['binnedb'], ascending = False)
但是不行...谢谢!
间隔列实际上是遵循特定顺序的分类列。如果 "binnedb" 是分类列,您可以访问其类别代码并使用 argsort
:
df = df.iloc[df['binnedb'].cat.codes.argsort()]
因为它是 inverval
类型的列,您可以使用 left
获取左侧范围并根据它进行排序。
df['sortkey']=df.binnedb.map(lambda x : x.left)
df=df.sort_values('sortkey')
我的输出如下所示:
binnedb Proba-A Proba-B Esperance-A Esperance-B
0 (0.0101, 0.0202] 0.547826 0.539130 0.007817 0.007693
1 (0.0302, 0.0402] 0.547826 0.539130 0.005963 0.005854
2 (0.0201, 0.0302] 0.547826 0.539130 0.008360 0.008227
我想做的是根据binnedb列(也将按升序排序)对df进行升序排序。如果您不明白这个问题,请告诉我。这就是我到目前为止所尝试的:df.sort_values(by=['binnedb'], ascending = False)
但是不行...谢谢!
间隔列实际上是遵循特定顺序的分类列。如果 "binnedb" 是分类列,您可以访问其类别代码并使用 argsort
:
df = df.iloc[df['binnedb'].cat.codes.argsort()]
因为它是 inverval
类型的列,您可以使用 left
获取左侧范围并根据它进行排序。
df['sortkey']=df.binnedb.map(lambda x : x.left)
df=df.sort_values('sortkey')