我有以下 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 进行排序,其中所有数据看起来都像标记。
请使用以下方式排序:
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