Python有序元组列表按绝对值排序
Posted
技术标签:
【中文标题】Python有序元组列表按绝对值排序【英文标题】:Python Ordered Tuple list ranked by absolute value 【发布时间】:2018-12-01 23:44:50 【问题描述】:我正在尝试根据信息行创建一个有序的元组列表:
team stat1 explain1 stat2 explain2 stat3 explain3
green +10 inc due to.. -8 dec due to.. +2 inc due to..
blue -6 dec due to.. +5 inc due to.. +8 inc due to..
red +5 inc due to.. +10 inc due to.. -2 dec due to..
我想为每个团队创建一个有序的元组列表(按绝对值),所以 'team' 'blue' 看起来像:
tuple list based on above order: Abs value ordered tuple list:
-6: dec due to.. 8: incr due to..
5: inc due to.. -6: decr due to..
8: inc due to.. 5: incr due to..
【问题讨论】:
这应该针对所有统计数据一起完成,还是针对其中一个统计数据? 嗨,Martijn,谢谢。这是一个更大的程序块。我正在尝试按降序为每个团队撰写评论,说明哪个统计数据在一段时间内的变化中发挥的作用最大。解释很容易编程,但整体情况似乎具有挑战性。总共有 5 个统计数据,20 个团队,我需要为每个团队写评论,解释所有 5 个变化。球队按总统计数据排序。 对,那么为什么不在转置后为每一行生成输出? 因此生成一个带有“stat”和“explain”列的单独数据框,按绝对值对该数据框进行排序,并从中生成报告。您可以在其中保留团队信息并使用分组。 啊,我明白你在说什么,是的,这可以工作!最后一个问题,一旦我这样做了,一旦它是绝对值顺序,我将如何将负值应用回列表? Martijn,再次感谢您的补充评论! 【参考方案1】:转置您的数据框以形成每个团队的三行,每行由团队名称、统计更改值和该单个统计的说明组成。添加一个具有绝对值的新列,以便您可以轻松地对其进行排序:
transposed_df = pd.DataFrame(
'team': np.repeat(df.transpose().iloc[0].values, 3),
'stat': pd.concat((
df.transpose().iloc[1::2, i]
for i in range(3)), ignore_index=True),
'explain': pd.concat((
df.transpose().iloc[2::2, i]
for i in range(3)), ignore_index=True),
'abs_stat': pd.concat((
df.transpose().iloc[1::2, i]
for i in range(3)), ignore_index=True).abs(),
, columns=['team', 'stat', 'explain', 'abs_stat'])
现在生成排序输出很简单:
transposed_df.sort_values(by=['team', 'abs_stat'], ascending=False).drop('abs_stat', axis=1)
这会产生:
team stat explain
7 red 10 inc due to..
6 red 5 inc due to..
8 red -2 dec due to..
0 green 10 inc due to..
1 green -8 dec due to..
2 green 2 inc due to..
5 blue 8 inc due to..
3 blue -6 dec due to..
4 blue 5 inc due to..
【讨论】:
谢谢 Martijn,我也想过,但我是按行而不是按列进行的。我可以为每个统计数据创建一个绝对值列,然后根据这些绝对数字创建列表,但我需要最终列表来表示绝对顺序列表中的负值 @John:啊,对不起,我确实想弄清楚你在排序什么。那么,您希望每行中的 3 个统计信息按绝对值排序吗?以上是关于Python有序元组列表按绝对值排序的主要内容,如果未能解决你的问题,请参考以下文章
Leetcode练习(Python):链表类:第109题:有序链表转换二叉搜索树:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个