我有一个像这样的pandas数据框:
./a.out: symbol lookup error: ./a.out: undefined symbol: gsl_multifit nlinear_trs_lmaccel
它基本上是一个具有两个多索引级别的groupby对象。
我想根据 value
Id
2014-03-13 1 -3
2 -6
3 -3.2
4 -3.1
5 -5
2014-03-14 1 -3.4
2 -6.2
3 -3.2
4 -3.2
5 -5.9
列按升序对其进行排序,但保持0级(日期)保持不变,以便结果看起来像这样:
value
以下是生成初始数据的代码:
value
Id
2014-03-13 2 -6
5 -5
3 -3.2
4 -3.1
1 -3
2014-03-14 2 -6.2
5 -5.9
1 -3.4
3 -3.2
4 -3.2
答案 0 :(得分:5)
对我来说,作品reset_index
+ sort_values
+ set_index
+ rename_axis
:
df = df.reset_index() \
.sort_values(['level_0','value']) \
.set_index(['level_0','Id']) \
.rename_axis([None, 'Id'])
print (df)
value
Id
2014-03-13 2 -6.0
5 -5.0
3 -3.2
4 -3.1
1 -3.0
2014-03-14 2 -6.2
5 -5.9
1 -3.4
3 -3.2
4 -3.2
sort_values
+ swaplevel
+ sort_index
的另一种解决方案:
df = df.sort_values('value')
.swaplevel(0,1)
.sort_index(level=1, sort_remaining=False)
.swaplevel(0,1)
print (df)
value
Id
2014-03-13 2 -6.0
5 -5.0
3 -3.2
4 -3.1
1 -3.0
2014-03-14 2 -6.2
5 -5.9
1 -3.4
3 -3.2
4 -3.2
交换水平是必要的,因为:
print (df.sort_values('value').sort_index(level=0, sort_remaining=False))
value
Id
2014-03-13 1 -3.0
2 -6.0
3 -3.2
4 -3.1
5 -5.0
2014-03-14 1 -3.4
2 -6.2
3 -3.2
4 -3.2
5 -5.9
对于pandas 0.23.0
,可以排序columns and index levels together:
df.index.names = ['level1','level2']
print (df.sort_values(['level1','value']))
value
level1 level2
2014-03-13 2 -6.0
5 -5.0
3 -3.2
4 -3.1
1 -3.0
2014-03-14 2 -6.2
5 -5.9
1 -3.4
3 -3.2
4 -3.2
答案 1 :(得分:0)
据我所知,索引和列的同时排序是不可能的,但是一个简单的解决方法如下:
df = df.reset_index().sort_values(by = ['level_0','values']).set_index(['level_0','Id'])
...如果你需要摆脱< level_0'索引标签:
df.index.names = [None, 'Id']
<强>设定:强>
import pandas as pd
import io
c = io.StringIO(u'''
Id value
2014-03-13 1 -3
2014-03-13 2 -6
2014-03-13 3 -3.2 2014-03-13 4 -3.1
2014-03-13 5 -5
2014-03-14 1 -3.4
2014-03-14 2 -6.2
2014-03-14 3 -3.2
2014-03-14 4 -3.2
2014-03-14 5 -5.9
''')
df = pd.read_csv(c, delim_whitespace = True)
df = df.groupby([df.index,'Id']).max()
初始df:
value
Id
2014-03-13 1 -3.0
2 -6.0
3 -3.2
4 -3.1
5 -5.0
2014-03-14 1 -3.4
2 -6.2
3 -3.2
4 -3.2
5 -5.9
<强>输出继电器:强>
value
Id
2014-03-13 2 -6.0
5 -5.0
3 -3.2
4 -3.1
1 -3.0
2014-03-14 2 -6.2
5 -5.9
1 -3.4
3 -3.2
4 -3.2