簡體   English   中英

Python Ordered Tuple列表按絕對值排序

[英]Python Ordered Tuple list ranked by absolute value

我試圖根據信息行創建一個有序的元組列表:

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..

我想為每個團隊創建一個有序的元組列表(按絕對值),所以'團隊''藍色'看起來像:

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..

轉置您的數據框以形成每個團隊三行,每行包含團隊名稱,統計更改值以及該單個統計信息的說明。 添加一個具有絕對值的新列,以便您可以輕松地對其進行排序:

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..

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM