Python操作列和行的顺序重塑

2024-05-15 08:21:05 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个输入数据帧:

import pandas as pd

df = pd.DataFrame({"AX_970" : {0 : 0.7, 1 : 0.1, 2 : 0.2},
                   "AZ_980" : {0 : 0.2, 1 : 0.7, 2 : 0.1},
                   "BV_197" : {0 : 0.5, 1 : 0.2, 2 : 0.3},
                   "BT_980" : {0 : 0.1, 1 : 0.22, 2 : 0.7}
                   })
df["id"] = df.index
df.head()

Input table

    AX_970  AZ_980  BT_980  BV_197  id
0     0.7      0.2     0.1   0.5    0
1     0.1      0.7    0.22   0.2    1
2     0.2      0.1     0.7   0.3    2

我需要转换这个输入,正如您在下面的输出示例中看到的:

(输出按降序排序)

        1      2       3       4   id
0   AX_970  BV_197  AZ_980  BT_980  0
1   AZ_980  BT_980  BV_197  AX_970  1
2   BT_980  BV_197  AX_970  AZ_980  2

如果你有什么想法,请分享。 非常感谢你!你知道吗


Tags: 数据importiddataframepandasdfinputindex
1条回答
网友
1楼 · 发布于 2024-05-15 08:21:05

可以将^{}^{}一起使用:

df.iloc[:, :-1] = df.columns[np.argsort(df.iloc[:, :-1].values, axis=1)[:, ::-1]]
df.columns[    

print(df)

   AX_970  AZ_980  BT_980  BV_197  id
0  AX_970  BV_197  AZ_980  BT_980   0
1  AZ_980  BT_980  BV_197  AX_970   1
2  BT_980  BV_197  AX_970  AZ_980   2

您可以按如下方式重命名列。逻辑是冗长的,因为您不应该就地更新底层数组,因为这可能会导致副作用。你知道吗

arr = df.columns.values
arr[:-1] = np.arange(1, len(df.columns))
df.columns = arr

print(df)

        1       2       3       4  id
0  AX_970  BV_197  AZ_980  BT_980   0
1  AZ_980  BT_980  BV_197  AX_970   1
2  BT_980  BV_197  AX_970  AZ_980   2

相关问题 更多 >