[英]Sorting Pandas Dataframe by matching multiple rows
假設我有一個像這樣的 DataFrame:
data=np.array([[-1.5625e-05,-1.5625e-05,-4.6875e-05],
[-1.5625e-05,-1.5625e-05,-1.5625e-05],
[-1.5625e-05,1.5625e-05,-4.6875e-05],
[-1.5625e-05,1.5625e-05,-1.5625e-05],
[1.5625e-05,-1.5625e-05,-4.6875e-05],
[1.5625e-05,-1.5625e-05,-1.5625e-05],
[1.5625e-05,1.5625e-05,-4.6875e-05],
[1.5625e-05,1.5625e-05,-1.5625e-05]])
df=pd.DataFrame(data=data,columns=['x','y','z'])
和一個 numpy 陣列
coord=np.array([[-1.5625e-05,-1.5625e-05,-4.6875e-05],
[-1.5625e-05,1.5625e-05,-4.6875e-05],
[1.5625e-05,-1.5625e-05,-4.6875e-05],
[1.5625e-05,1.5625e-05,-4.6875e-05],
[-1.5625e-05,-1.5625e-05,-1.5625e-05],
[-1.5625e-05,1.5625e-05,-1.5625e-05],
[1.5625e-05,-1.5625e-05,-1.5625e-05],
[1.5625e-05,1.5625e-05,-1.5625e-05]])
Pandas Dataframe 和坐標數組中的行數始終相同。 如您所見,Pandas DataFrame 和坐標之間的行相同,但順序不同。 我想根據坐標數組的順序對 DataFrame 進行排序(例如 df.x==coord[:,0] & df.y==coord[:,1] & df.z==coord[:, 2])。
您可以通過以下方式進行所需的排序:
df.sort_values(['x', 'y', 'z'], ascending=[True, True, True])
完整代碼:
import numpy as np
import pandas as pd
data=np.array([[-1.5625e-05,-1.5625e-05,-4.6875e-05],
[-1.5625e-05,-1.5625e-05,-1.5625e-05],
[-1.5625e-05,1.5625e-05,-4.6875e-05],
[-1.5625e-05,1.5625e-05,-1.5625e-05],
[1.5625e-05,-1.5625e-05,-4.6875e-05],
[1.5625e-05,-1.5625e-05,-1.5625e-05],
[1.5625e-05,1.5625e-05,-4.6875e-05],
[1.5625e-05,1.5625e-05,-1.5625e-05]])
df= pd.DataFrame(data=data,columns=['x','y','z'])
df.sort_values(['x', 'y', 'z'], ascending=[True, True, True])
print(df)
output:
x y z
0 -0.000016 -0.000016 -0.000047
1 -0.000016 -0.000016 -0.000016
2 -0.000016 0.000016 -0.000047
3 -0.000016 0.000016 -0.000016
4 0.000016 -0.000016 -0.000047
5 0.000016 -0.000016 -0.000016
6 0.000016 0.000016 -0.000047
7 0.000016 0.000016 -0.000016
你可以這樣做:
代碼
df2 = pd.DataFrame(coord, columns=list("xyz"))
sort_cols = list("yxz")
df = df.sort_values(sort_cols)
df2 = df2.sort_values(sort_cols)
df.index = df2.index
df = df.sort_index()
這應該返回排序為坐標(輸出)的df:
x y z
0 -0.000016 -0.000016 -0.000047
1 -0.000016 0.000016 -0.000047
2 0.000016 -0.000016 -0.000047
3 0.000016 0.000016 -0.000047
4 -0.000016 -0.000016 -0.000016
5 -0.000016 0.000016 -0.000016
6 0.000016 -0.000016 -0.000016
7 0.000016 0.000016 -0.000016
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.