排序 MultiIndex DataFrame
Sorting MultiIndex DataFrame
我一直在寻找一种方法来根据它们包含的值对 MultiIndex DataFrame 中的每个行级 0、列级 1 对进行排序,但到目前为止我还没有成功。例如,如果我的 DataFrame 看起来像
import numpy as np
import pandas as pd
np.random.seed(7)
tup = (('A', 'B'), np.arange(2))
index = pd.MultiIndex.from_product(tup, names=('row-lvl 0', 'row-lvl 1'))
tup = (('X', 'Y'), ('q', 'p'))
columns = pd.MultiIndex.from_product(tup, names=('col-lvl 0', 'col-lvl 1'))
data = np.random.rand(4, 4)
df = pd.DataFrame(data, index=index, columns=columns)
print(df)
col-lvl 0 X Y
col-lvl 1 q p q p
row-lvl 0 row-lvl 1
A 0 0.076308 0.779919 0.438409 0.723465
1 0.977990 0.538496 0.501120 0.072051
B 0 0.268439 0.499883 0.679230 0.803739
1 0.380941 0.065936 0.288146 0.909594
我希望它按升序排序,看起来像
col-lvl 0 X Y
col-lvl 1 q p q p
row-lvl 0 row-lvl 1
A 0 0.076308 0.538496 0.438409 0.072051
1 0.977990 0.779919 0.501120 0.723465
B 0 0.268439 0.065936 0.288146 0.803739
1 0.380941 0.499883 0.679230 0.909594
我已经阅读了 sort_values 和 sort_index 的 pandas 文档,但它们似乎不是我要查找的内容。如有任何帮助,我们将不胜感激。
这不是 sort_values
,因为您忽略了 index
影响,只检查值
for x , y in df.groupby(level=0):
... df.loc[x]=np.sort(y.values,0)
...
df
col-lvl 0 X Y
col-lvl 1 q p q p
row-lvl 0 row-lvl 1
A 0 0.076308 0.538496 0.438409 0.072051
1 0.977990 0.779919 0.501120 0.723465
B 0 0.268439 0.065936 0.288146 0.803739
1 0.380941 0.499883 0.679230 0.909594
我一直在寻找一种方法来根据它们包含的值对 MultiIndex DataFrame 中的每个行级 0、列级 1 对进行排序,但到目前为止我还没有成功。例如,如果我的 DataFrame 看起来像
import numpy as np
import pandas as pd
np.random.seed(7)
tup = (('A', 'B'), np.arange(2))
index = pd.MultiIndex.from_product(tup, names=('row-lvl 0', 'row-lvl 1'))
tup = (('X', 'Y'), ('q', 'p'))
columns = pd.MultiIndex.from_product(tup, names=('col-lvl 0', 'col-lvl 1'))
data = np.random.rand(4, 4)
df = pd.DataFrame(data, index=index, columns=columns)
print(df)
col-lvl 0 X Y
col-lvl 1 q p q p
row-lvl 0 row-lvl 1
A 0 0.076308 0.779919 0.438409 0.723465
1 0.977990 0.538496 0.501120 0.072051
B 0 0.268439 0.499883 0.679230 0.803739
1 0.380941 0.065936 0.288146 0.909594
我希望它按升序排序,看起来像
col-lvl 0 X Y
col-lvl 1 q p q p
row-lvl 0 row-lvl 1
A 0 0.076308 0.538496 0.438409 0.072051
1 0.977990 0.779919 0.501120 0.723465
B 0 0.268439 0.065936 0.288146 0.803739
1 0.380941 0.499883 0.679230 0.909594
我已经阅读了 sort_values 和 sort_index 的 pandas 文档,但它们似乎不是我要查找的内容。如有任何帮助,我们将不胜感激。
这不是 sort_values
,因为您忽略了 index
影响,只检查值
for x , y in df.groupby(level=0):
... df.loc[x]=np.sort(y.values,0)
...
df
col-lvl 0 X Y
col-lvl 1 q p q p
row-lvl 0 row-lvl 1
A 0 0.076308 0.538496 0.438409 0.072051
1 0.977990 0.779919 0.501120 0.723465
B 0 0.268439 0.065936 0.288146 0.803739
1 0.380941 0.499883 0.679230 0.909594