【发布时间】:2021-03-09 06:49:59
【问题描述】:
考虑下面的df:
In [3771]: df = pd.DataFrame({'A': ['a'] * 11,
'B': ['b'] * 11,
'C': ['C1', 'C1', 'C2','C1', 'C3', 'C3', 'C2', 'C3', 'C3', 'C2', 'C2'],
'D': ['D1', 'D2', 'D1', 'D3', 'D3', 'D2', 'D4', 'D4', 'D1', 'D2', 'D3'],
'E': [{'value': '4', 'percentage': None}, {'value': 5, 'percentage': None}, {'value': 12, 'percentage': None}, {'value': 5, 'percentage': None}, {'value': '12', 'percentage': None}, {'value': 'N/A', 'percentage': None}, {}, {'value': 19, 'percentage': None}, {'value': 12, 'percentage': None}, {'value': 11, 'percentage': None}, np.nan],
'F':[{'value': 72, 'percentage': None}, {'value': 72, 'percentage': None}, {'value': 66, 'percentage': None}, {'value': 62, 'percentage': None}, {'value': 66, 'percentage': None}, {'value': 16, 'percentage': None}, {'value': 67, 'percentage': None}, {'value': 67, 'percentage': None}, {'value': 66, 'percentage': None}, {'value': 54, 'percentage': None}, {'value': 78, 'percentage': None}]})
In [3779]: df
Out[3898]:
A B C D E F
0 a b C1 D1 {'value': '4', 'percentage': None} {'value': 72, 'percentage': None}
1 a b C1 D2 {'value': 5, 'percentage': None} {'value': 72, 'percentage': None}
2 a b C2 D1 {'value': 12, 'percentage': None} {'value': 66, 'percentage': None}
3 a b C1 D3 {'value': 5, 'percentage': None} {'value': 62, 'percentage': None}
4 a b C3 D3 {'value': '12', 'percentage': None} {'value': 66, 'percentage': None}
5 a b C3 D2 {'value': 'N/A', 'percentage': None} {'value': 16, 'percentage': None}
6 a b C2 D4 {} {'value': 67, 'percentage': None}
7 a b C3 D4 {'value': 19, 'percentage': None} {'value': 67, 'percentage': None}
8 a b C3 D1 {'value': 12, 'percentage': None} {'value': 66, 'percentage': None}
9 a b C2 D2 {'value': 11, 'percentage': None} {'value': 54, 'percentage': None}
10 a b C2 D3 NaN {'value': 78, 'percentage': None}
我pivot以上df:
In [3776]: x = df.pivot(['B', 'C', 'D'], 'A', ['E', 'F'])
In [3781]: x
Out[3900]:
E F
A a a
B C D
b C1 D1 {'value': '4', 'percentage': None} {'value': 72, 'percentage': None}
D2 {'value': 5, 'percentage': None} {'value': 72, 'percentage': None}
D3 {'value': 5, 'percentage': None} {'value': 62, 'percentage': None}
C2 D1 {'value': 12, 'percentage': None} {'value': 66, 'percentage': None}
D2 {'value': 11, 'percentage': None} {'value': 54, 'percentage': None}
D3 NaN {'value': 78, 'percentage': None}
D4 {} {'value': 67, 'percentage': None}
C3 D1 {'value': 12, 'percentage': None} {'value': 66, 'percentage': None}
D2 {'value': 'N/A', 'percentage': None} {'value': 16, 'percentage': None}
D3 {'value': '12', 'percentage': None} {'value': 66, 'percentage': None}
D4 {'value': 19, 'percentage': None} {'value': 67, 'percentage': None}
我想根据索引为(E, a) 的多级列对每组外列D 的最内列进行排序,该列是value 的降序。字典。
编辑:
dict 可以包含具有混合数据类型的 value 键。它可以是 int、str、NaN 或根本不可用。
预期输出:
E F
A a a
B C D
b C1 D2 {'value': 5, 'percentage': None} {'value': 72, 'percentage': None}
D3 {'value': 5, 'percentage': None} {'value': 62, 'percentage': None}
D1 {'value': '4', 'percentage': None} {'value': 72, 'percentage': None}
C2 D1 {'value': 12, 'percentage': None} {'value': 66, 'percentage': None}
D2 {'value': 11, 'percentage': None} {'value': 54, 'percentage': None}
D4 {} {'value': 67, 'percentage': None}
D3 NaN {'value': 78, 'percentage': None}
C3 D4 {'value': 19, 'percentage': None} {'value': 67, 'percentage': None}
D1 {'value': 12, 'percentage': None} {'value': 66, 'percentage': None}
D3 {'value': '12', 'percentage': None} {'value': 66, 'percentage': None}
D2 {'value': 'N/A', 'percentage': None} {'value': 16, 'percentage': None}
【问题讨论】:
标签: python python-3.x pandas dataframe sorting