【问题标题】:How to sort value of each row of data frame and return the sorted columns name如何对数据框每一行的值进行排序并返回排好序的列名
【发布时间】:2018-09-16 16:19:12
【问题描述】:

我有 2 个不同行的数据框,dF1=(1098 x 2 column ) 和 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 的列表作为值。最后,我可以从这个字典中创建一个数据框。 但是当我写这个函数时正在发送(“'float'对象没有属性'sort_val'”,'发生在索引G1')或'float'对象不可迭代。

我是一名新程序员(初学者),

如何纠正我的功能以达到我的目标或 如果我的想法完全错误,我怎么能得到我的结果?

【问题讨论】:

  • 你有脱粒吗?
  • 不是现在,我想我必须有,我的教授将来会把它添加到我的练习中。

标签: python pandas dataframe


【解决方案1】:

您可以为您的 df 应用 rank,然后按照 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

【讨论】:

  • 这正是我想要的,谢谢,但是你能在这里告诉我 P ,指的是什么吗?我是新程序员,我了解 sorted 和 rank 他们的结果是什么,但我没有在这里得到 P 或 Z。
猜你喜欢
  • 1970-01-01
  • 2022-09-28
  • 2011-11-12
  • 2020-04-23
  • 2020-04-20
  • 1970-01-01
  • 2018-06-25
相关资源
最近更新 更多