我有2个不同行的数据帧,dF1 =(1098 x 2列)和 df2 =(1331 x2)例如:
df1
lat-2 long-2
R1 10.612811 46.265142
R2 10.604078 45.896510
R3 10.610205 45.727291
R4 10.606051 45.772968
R5 10.596646 46.517013
DF2
lat-1 long-1
G1 10.604065 45.896533
G2 10.612811 46.265142
G3 10.606051 45.772968
G4 10.610205 45.727291
G5 10.606747 44.772287
G6 10.619976 45.847164
G7 10.607682 45.477258
G8 10.784809 44.769609
在Get Nearest Point from each other in pandas dataframe的帮助下 我计算df1的每一行与df2的所有行之间的欧几里德距离,因此 new_df 具有(1089 x 1331)。 new_df
G1 G2 G3 G4 G5 G6 G7 G8
R1 0.368713 0.000000 0.492220 0.537857 1.492867 0.418039 0.787901 1.505391
R2 0.000026 0.368735 0.123558 0.169330 1.124226 0.051844 0.419267 1.141302
R3 0.169353 0.537857 0.045865 0.000000 0.955010 0.120271 0.250046 0.973469
R4 0.123581 0.492220 0.000000 0.045865 1.000681 0.075491 0.295714 1.019158
R5 0.620524 0.252389 0.744104 0.789838 1.744755 0.670255 1.039814 1.757506
我想要这样的结果:
close
R1 [G2,G1,G6,G3,G5,G4,G7,G8]
R2 [G1, G6, ,,......]
R3 [G4,...]
R4 [G3,....]
R5 [G2,G5,...]
R6 [G2,G3,...]
R7 [G4,...]
换句话说,我希望 new_df 的每一行按升序排列列的值,最后返回我想要的结果。
我无法使用Get Nearest Point from each other in pandas dataframe的代码 我试着这样写:
def Closest(df):
d=defaultdict(list)
for x in (df.index):
y=df.loc[str(x)].copy()
M=y.tolist()
Q=M.sort_val(ascending=True)
p=Q.index
d[x].appand(p)
return (d)
我的想法是:
h=new_df.loc["R1"].copy()
h:
G1 0.368713
G2 0.000000
G3 0.492220
G4 0.537857
G5 1.492867
G6 0.418039
G7 0.787901
G8 1.505391
Name: R3, dtype: float64
k=h.sort_values(ascending=True)
k.index
d={}
d['R']=k.index
所以我想创建一个字典,其中包含索引R作为键,有序G列表作为值。最后,我可以从这个字典中创建一个数据帧。 但是当我写这个函数发送时("'浮动'对象没有属性' sort_val'",'发生在索引G1')或者'漂浮'对象不可迭代。
我是一名新程序员(初学者),
如何更正我的功能以达到我的目标或 如果我的想法完全错了,我怎么能得到我的结果?
答案 0 :(得分:0)
您可以为您的df应用rank
,然后按照排名顺序对列名称进行排序,并创建一个新的Series
lst=[ [z for z,p in sorted(zip(df.columns.values.tolist(),x),key=lambda y: y[1])] for x in df.apply(lambda x : x.rank(),1).values.tolist()]
pd.Series(data=lst,index=df.index)
Out[1531]:
R1 [G2, G1, G6, G3, G4, G7, G5, G8]
R2 [G1, G6, G3, G4, G2, G7, G5, G8]
R3 [G4, G3, G6, G1, G7, G2, G5, G8]
R4 [G3, G4, G6, G1, G7, G2, G5, G8]
R5 [G2, G1, G6, G3, G4, G7, G5, G8]
dtype: object