在groupby之后筛选具有最大行值的列组合



我有一个数据帧,其中每个序列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

首先对一列SequenceDuration使用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

相关内容

最新更新