我有一个数据帧,其中每个序列ID都有列组合(SubSeq1, Duration1), (SubSeq2, Duration2), (SubSeq3, Duration3)
我想根据以下条件过滤数据:
对于列组合具有最高持续时间
Sequence SubSeq1 Duration1 SubSeq2 Duration2 SubSeq3 Duration3
1001 145 0 125 53 458 33
1001 475 20 175 54 652 45
1001 685 57 687 77 254 88
1002 125 54 175 96 786 26
1002 475 21 467 32 526 32
1003 325 68 301 54 529 41
1003 125 97 325 85 872 78
1004 129 15 429 41 981 82
1004 547 47 577 52 543 83
1004 666 65 722 63 257 85
我想要我的结果数据帧如下:
Sequence SubSeq Duration
1001 254 88
1002 175 96
1003 125 97
1004 257 85
首先对一列Sequence
和Duration
使用wide_to_long
,然后按DataFrame.sort_values
按多列排序,最后按DataFrame.drop_duplicates
:删除重复项
df = (pd.wide_to_long(df.reset_index(), stubnames=['SubSeq','Duration'], i='index', j='tmp')
.sort_values(['Sequence','Duration'], ascending=[True, False])
.drop_duplicates('Sequence')
.reset_index(drop=True))
print (df)
Sequence SubSeq Duration
0 1001 254 88
1 1002 175 96
2 1003 125 97
3 1004 257 85