我有一個這樣的資料框:
well pad type
'1A22' 22 a1
'2A22' 22 a1
'4A23' 23 a2
我想按 2 列的 pad 對資料框進行排序,但是第二列(很好)使用“A”之前的數字,所以我對第二列的鍵這樣做,我得到了一個錯誤。謝謝你的幫助
df=df.sort_values(by=['pad','well'],key=lambda x1,x2: (int(x1),int(x2.split('A')[0])),ascending=True)
TypeError:()缺少1個必需的位置引數:'x2'
uj5u.com熱心網友回復:
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
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/453895.html
