【发布时间】:2021-03-19 20:51:36
【问题描述】:
这是我的previous question 的扩展:
考虑下面df:
In [68]: 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': 9, 'percentage': None}, {'value': '12', 'percentage': None}, {'value': 'N/A', 'percentage': None}, {}, {'valu
...: e': 24, 'percentage': None}, {'value': 12, 'percentage': None}, {'value': 33, 'percentage': None}, {'value': 11, 'percentage': None}]})
...:
Pivot 以上df:
In [69]: x = df.pivot(['B', 'C', 'D'], 'A', ['E'])
In [70]: x
Out[70]:
E
A a
B C D
b C1 D1 {'value': '4', 'percentage': None}
D2 {'value': 5, 'percentage': None}
D3 {'value': 9, 'percentage': None}
C2 D1 {'value': 12, 'percentage': None}
D2 {'value': 33, 'percentage': None}
D3 {'value': 11, 'percentage': None}
D4 {}
C3 D1 {'value': 12, 'percentage': None}
D2 {'value': 'N/A', 'percentage': None}
D3 {'value': '12', 'percentage': None}
D4 {'value': 24, 'percentage': None}
我想根据来自字典的value 键在asc/desc 中的索引为(E, a) 的多级列对每组外列B and C 的最内列D 进行排序。
但是,对于每个组,都会有一行包含所有其他行的 total 值。无论排序顺序如何(asc 或 desc),我总是需要将该行保留在最后。
desc 情况下的预期输出:
Out[70]:
E
A a
B C D
b C1 D2 {'value': 5, 'percentage': None}
D1 {'value': '4', 'percentage': None}
D3 {'value': 9, 'percentage': None}
C2 D1 {'value': 12, 'percentage': None}
D3 {'value': 11, 'percentage': None}
D4 {}
D2 {'value': 33, 'percentage': None}
C3 D1 {'value': 12, 'percentage': None}
D3 {'value': '12', 'percentage': None}
D2 {'value': 'N/A', 'percentage': None}
D4 {'value': 24, 'percentage': None}
asc 情况下的预期输出:
Out[70]:
E
A a
B C D
b C1 D1 {'value': '4', 'percentage': None}
D2 {'value': 5, 'percentage': None}
D3 {'value': 9, 'percentage': None}
C2 D3 {'value': 11, 'percentage': None}
D1 {'value': 12, 'percentage': None}
D4 {}
D2 {'value': 33, 'percentage': None}
C3 D1 {'value': 12, 'percentage': None}
D3 {'value': '12', 'percentage': None}
D2 {'value': 'N/A', 'percentage': None}
D4 {'value': 24, 'percentage': None}
【问题讨论】:
-
由于您的数据结构而具有挑战性。您在数据框中有字典,通常不鼓励这样做。更不用说你想对字典中的值求和,有时是字符串,有时是整数。最好只创建一个
for循环。 -
@QuangHoang 我不想在这里总结任何东西。它只是根据一列对整个
df进行排序。排序逻辑主要在链接的question中得到解答。请看一看。我只想为每个组保留total的行。 -
是的,我看错了,但排序几乎是一回事。
-
我可以使用@jezrael 对最后一个问题的回答来解决这个问题。但它有点笨拙。所以我一直在寻找更好的方法。
-
@MayankPorwal 字典中的
value键是否可以包含负值?
标签: python python-3.x pandas dataframe sorting