如何使用函数按两列和一列进行排序



我有一个这样的数据帧:

well pad  type
'1A22' 22  a1
'2A22' 22  a1
'4A23' 23  a2

我想按pad和well的两列对数据帧进行排序,但第二列(well(使用了"A"之前的数字,所以我这样做是为了第二列的键,但我得到了一个错误。感谢您的帮助

df=df.sort_values(by=['pad','well'],key=lambda x1,x2: (int(x1),int(x2.split('A')[0])),ascending=True)

TypeError:((缺少1个必需的位置参数:"x2">

您可以创建一个中间排序键,方法是将列well中的字符串拆分为A,然后将第一次拆分的dtype类型更改为int:

df['key'] = df['well'].str.split('A', n=1).str[0].astype(int)
df = df.sort_values(['pad', 'key'])

备选方法1(使用sort_values两次(:

df = df.sort_values('pad').sort_values('well', key=lambda s: s.str.split('A', n=1).str[0].astype(int))

替代方法2(定义自定义密钥函数(:

def keyfunc(s):
if s.name == 'well':
return s.str.split('A', n=1).str[0].astype(int)
return s
df = df.sort_values(['pad', 'well'], key=keyfunc)

结果:

print(df)
well  pad type  key
0  1A22   22   a1    1
1  2A22   22   a1    2
2  4A23   23   a2    4

最新更新