我有一个这样的数据帧:
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