Pandas 通过使用“From”和“To”列来导出顺序

问题描述 投票:0回答:1

我有以下 df:

姓名 来自 决赛
托尼 C D D
托尼 B C D
托尼 A D
托尼 A B D
马克 A C
马克 A B C
马克 B C C

我可以看出 Tony 的数据排序不正确,因为与 Mark 不同,他的数据不是以空白 From 列开始,也不是以与最后一列匹配的 To 列结束。最重要的是,我可以看出 Tony 的数据未排序,因为 To 列的值与 From 列中的先前值不匹配。

我想找到一种方法来根据上述(和每个名称)对这个 df 进行排序,其中所有数据看起来都像标记。

python pandas dataframe sorting
1个回答
0
投票

请使用以下方式排序:

group.sort_values(by=['From', 'To', 'Final'], na_position='first')

所有代码:

import pandas as pd

data = {'Name': ['Tony', 'Tony', 'Tony', 'Tony', 'Mark', 'Mark', 'Mark'],
        'From': ['C', 'B', None, 'A', None, 'A', 'B'],
        'To': ['D', 'C', 'A', 'B', 'A', 'B', 'C'],
        'Final': ['D', 'D', 'D', 'D', 'C', 'C', 'C']}

df = pd.DataFrame(data)

def custom_sort(group):
    group = group.sort_values(by=['From', 'To', 'Final'], na_position='first')
    return group

df2= df.groupby('Name', group_keys=False, sort=False).apply(custom_sort)
df2 = df2.reset_index(drop=True)
print(df2)

输出:

   Name  From To Final
0  Tony  None  A     D
1  Tony     A  B     D
2  Tony     B  C     D
3  Tony     C  D     D
4  Mark  None  A     C
5  Mark     A  B     C
6  Mark     B  C     C
© www.soinside.com 2019 - 2024. All rights reserved.