当前位置: 首页 > 知识库问答 >
问题:

如何对每一行数据帧的值进行排序并返回排序后的列名称

陶朝明
2023-03-14

我有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

pandas数据帧中,借助于获取彼此之间的最近点,我计算df1的每一行和df2的所有行之间的欧几里德距离,因此新的_df具有(1089 x 1331)。新德里

            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,...] 

换句话说,我想让每一行新的_df按升序对列的值进行排序,最后返回我想要的结果。

我不能在熊猫数据帧中使用互相获取最近点的代码,我试着这样写:

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','occurrent at index G1')或'float'对象不可编辑。

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

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

共有1个答案

穆飞星
2023-03-14

您可以为您的df应用排名,然后按排名顺序对列名排序,并创建一个新的系列

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
 类似资料:
  • 我有一个像这样的数据框- 我有一个这样的列表- 现在,我想根据列名列表对数据框进行排序 因此,新的数据框将有列名称-

  • 假设我有一个包含列,和的数据帧,我想按升序按列排序,按降序按列排序,如何我要这么做吗?

  • 我目前有一个应用程序,可以显示1.5公里半径内附近的医院,它看起来是这样的: 我遇到的麻烦是,我不知道如何根据他们从最低到最高的计算距离来排序卡片。 我创建了一个来存储计算的距离列表,并用对其进行排序。 我如何确保小部件将遵循排序的距离值的顺序?

  • 问题内容: 我有这样的价值观: 我想按升序对每个值进行排序。我不想在集合之间进行排序,而是在每个集合中进行排序。 问题答案: 来自评论: 我想对每个集合进行排序。 这很容易。对于任何集合(或其他任何可迭代的对象),以排序顺序返回的元素列表: 请注意,这是给您一个,而不是一个。这是因为在数学和几乎每种编程语言中,集合的全部要点*都是无序的:集合和是同一集合。 您可能真的不想将这些元素排序为字符串,而

  • 我有一个pandas数据帧(df),我需要根据列值的计数对其进行排序。列的值是字符串。 例如,目标列的值为橙色、苹果色、香蕉色和桃色。单个计数(df['fruit'].value_counts())为: 香蕉2678 桃2250 橙色1765 苹果1691 结果我需要根据这些计数对初始数据帧(包括所有列等)进行排序。因此,在前2678行中,水果列中的值应为香蕉等

  • 编辑:对于同样的问题,我尝试编写一个比较器。但它不起作用