如何从第一列开始按顺序对 DataFrame 列进行排序?
How to sort DataFrame columns sequently from the first column?
我按行的最大值对 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
中的列的 DataFrame 子集之间的最大相关性,在每一步中添加具有最大相关性的新列到列表 l
。当没有更多列时,l
将保留所需的列顺序,df[l]
将为我们提供按最大相关性排序的列的 DataFrame:
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]
我按行的最大值对 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
中的列的 DataFrame 子集之间的最大相关性,在每一步中添加具有最大相关性的新列到列表 l
。当没有更多列时,l
将保留所需的列顺序,df[l]
将为我们提供按最大相关性排序的列的 DataFrame:
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]