【发布时间】:2021-01-17 12:10:06
【问题描述】:
我无法理解在对 Series 的索引进行排序时 key 函数是如何工作的。 例如我有这样的系列:
(0, 4) k
(12, 16) a
(24, 28) b
(4, 8) f
(8, 12) g
并且我希望索引处于下一个顺序:
(0, 4)
(4, 8)
(8, 12)
(12, 16)
(24, 28)
这些不是元组,而只是字符串。当我将它作为一个列表进行排序时,我只是创建一个键函数,并为每个元素返回第一个数字,元素根据该数字进行排序。但是在 sort_index() 的文档中,据说键函数应该接收一个系列并返回一个系列。那么它在这里是如何工作的呢?由于值与原始索引分离,因此对列表进行排序和更改索引并没有帮助。
这就是我使用列表的方式。这是数据框。之前我创建了工资箱来为每个工资设置一个间隔。
person col2 col3 wage wage_bin
0 a 5 g 4 (0,4]
1 b 3 e 14 (12,16]
2 c 4 e 25 (24,28]
3 d 8 p 9 (8,12]
4 a 1 s 5 (4,8]
5 d 6 x 12 (8,12]
据我了解,g 是 Series 类型
g = df.groupby('wage_bin').size()
wage_bin
(0,4] 1
(12,16] 1
(24,28] 1
(4,8] 1
(8,12] 2
dtype: int64
在这里,我从 g 系列的索引中制作了一个列表,并通过使用 partition 进行排序,取一个介于 '(' 和 ',' 之间的数字
k = list(g.index)
k.sort(key=lambda x: int(x.partition('(')[2].partition(',')[0]))
print(k)
['(0,4]', '(4,8]', '(8,12]', '(12,16]', '(24,28]']
所以我了解 key 在列表情况下的工作原理。我们有一个列表元素,而不是 x。但是当我尝试对 sort_series() 使用键功能时,我无法得到任何明智的结果。当 x 是一个系列时,我不明白在函数中使用 x 执行什么操作。
【问题讨论】:
-
你能附上你尝试过的代码吗?
-
添加了一个带有列表的部分,但系列没有什么好处
-
@Duck 我的回答与你的方法有点不同,但它仍然应该满足你的需要而不重置索引?
-
@David Erickson 是的,这将帮助我解决我的问题,谢谢
-
分享代码会有帮助;另一种选择是使用 python 的
sorted函数对索引进行排序:df.reindex(sorted(df.index, key=lambda x: x[0]))
标签: python pandas dataframe sorting series