[英]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.