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有序元组列表按绝对值排序的主要内容,如果未能解决你的问题,请参考以下文章

python中未按数字排序的元组列表

python 按升序对列表(或元组列表)进行排序

Leetcode练习(Python):链表类:第109题:有序链表转换二叉搜索树:给定一个单链表,其中的元素按升序排序,将其转换为高度平衡的二叉搜索树。 本题中,一个高度平衡二叉树是指一个二叉树每个

scala 元组

Python笔记22-----高阶函数

Python函数:内置函数(数学运算函数类型转换函数)