Python 如何从第一列开始依次对数据帧列进行排序?

Python 如何从第一列开始依次对数据帧列进行排序?,python,pandas,sorting,dataframe,correlation,Python,Pandas,Sorting,Dataframe,Correlation,我按行的最大值对df列进行排序 dff = centroids.reindex(df.sum().sort_values(ascending=False).index, axis=1) print(dff) 13 9 2 6 7 0 5 0 0.423586 0.472548 0.366301 0.423973 0.312807 0.476197 0.384652 1

我按行的最大值对df列进行排序

dff = centroids.reindex(df.sum().sort_values(ascending=False).index, axis=1)

print(dff)

    13        9         2         6         7         0         5
0   0.423586  0.472548  0.366301  0.423973  0.312807  0.476197  0.384652   
1   0.639636  0.734712  0.503772  0.600164  0.416451  0.730942  0.515370
2   0.749716  0.835071  0.549806  0.637331  0.419558  0.782306  0.507648
3   0.817579  0.844361  0.577874  0.621483  0.408825  0.727671  0.458346   
4   0.890916  0.831640  0.631127  0.611741  0.438974  0.654338  0.430330
5   0.952046  0.802077  0.694321  0.601616  0.496798  0.572743  0.423915
6   0.995009  0.768293  0.749186  0.590912  0.553378  0.500568  0.427607   
7   1.000000  0.718386  0.781207  0.570253  0.598234  0.425387  0.436355   
8   0.993004  0.690660  0.779607  0.550149  0.600459  0.396121  0.422891   
现在,我需要根据列之间的相关性对这些列进行排序,但要按顺序执行。所以,通过与第一列的最佳相关性定义第二列,通过与第二列的最佳相关性定义第三列,依此类推。 我还想保存列的原始标签

我对此有一些想法,但因为我是python代码的新手,所以无法工作

k_num = 7 # number of columns in df
def corelation(df):
   col = 1
   for column in dff.columns[col:]:
       dff.reindex(dff.corr().sort_values(dff.columns[col], ascending=False).index, axis = 1)
   col += 1
   if col == k_num:
      return(df)

如果有人能帮助我,我将不胜感激

我们可以创建一个包含所需列顺序的列表。让我们称它为
l
,并首先用第一列
0
填充它。然后,我们迭代地查找存储为
l
中最后一个元素的列与数据帧子集之间的最大相关性,该数据帧子集不包括已在
l
中的列,并在每个步骤中将具有最大相关性的新列添加到列表
l
。当没有更多列剩余时,
l
将保留所需的列顺序,
df[l]
将为我们提供按最大相关性排序的列的数据帧:

np.random.seed(42)
df = pd.DataFrame(np.random.randn(10, 10))

l = [0]
while len(l) < len(df.columns):
    i = df[df.columns.difference(l)].corrwith(df[l[-1]]).abs().idxmax()
    l += [i]

df[l]
np.random.seed(42)
df=pd.DataFrame(np.random.randn(10,10))
l=[0]
而len(l)
你好!您的代码中的dff是什么?你为什么不在for循环中使用列迭代器呢?谢谢你的回答,你完全明白我想做什么,但你的解决方案让我回到了df“TypeError:其他必须是多索引或元组列表”你可以共享
df.columns
输出吗?不确定你的列名是字符串还是整数。如果它们是字符串,您可以尝试在
之前用
l=['0']
初始化l(因此将数字括在引号中),而
循环我用['0']尝试过,但它写入错误“需要一个整数”有些不对劲,我可以用
df=pd.read\u csv('df\u damir.csv')。drop('Unnamed:0',1)
然后像上面一样运行完全相同的脚本,没有错误,只是更改为
l=['0']
,因为当我使用
read\u csv从文件中读取时,列名被读取为字符串