考虑以下数据框:
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}
我 旋转
上述数据框:
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}
我希望对于每个外部列
B
和C
的组,按照多级索引(E, a)
的value
键的值进行降序排列,以内部列D
为基础进行排序。
编辑:
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}