我有一个数据框,其中一部分如下所示
df1 = pd.DataFrame({
'id1': ['676PA','676RA','197PA','197RA','199PA','199RA','834PA','834RA','950PA','950RA','952PA','952RA','953PA','953RA','954PA','954RA','956PA','956RA'],
'Category1' : ['P-L','FL123','P-L','FL123','P-L','FL123','P-L','FL123','FL123','P-L','P-L','FL123','FL123','P-L','FL123','P-L','P-L','FL123'],
'Val1' : [-4.0,39.0,-8.0,45.0,-4.0,27.0,-46.0,271.0,-70.0,3.0,-34.0,192.0,-56.0,3.0,-56.0,3.0,-52.0,292.0]
})
每个id有两个条目“PA”和“RA”,对应的类别和Val如下所示
类别的顺序不正确,我希望所有ID的顺序都一致。我希望每个ID的P-L排在第一位,后面是FL123。我已经在下面展示了“电流”以及我希望看到的输出。非常感谢您的帮助
编辑-保留ID的历史顺序
由于您希望保持ID的顺序(因此您希望保持676199等),因此需要创建某种计数,以使用相同的数字对每个ID进行计数(即676R和676PA都等于0,RA和PA的下一个ID都等于1,依此类推……)
您可以做的非常类似,您只需要一个不同的临时列:
.groupby()
和.cumcount()
创建一个新的临时列,其中您在Category1
上分组,以便它逐个统计每个类别李>Category1
列上排序:)注意:只有当每个ID有两个类别时,这才有效
原件-如果不需要保留订单
如评论中所述,如果ID的显示顺序无关紧要(即197PA、197RA可以在整个列表中排在第一位(但同时出现),则可以使用排序。但是,由于您只需要使用数字进行排序,因此需要分两步(可选第三步)进行排序:
temp_id
),将“PA”替换为“RA”(反之亦然)new_id
升序和Category1
降序排序temp_id
列,因为您不再需要它李>相关问题 更多 >
编程相关推荐