如何使用方法链更改 pandas 数据框中列的顺序?

How to change the order of columns in a pandas dataframe using a method chain?

使用方括号更改 pandas 数据框中列的顺序很容易(见下文,我在这里切换了前两列)。但是,我找不到任何有关如何使用方法链执行此操作的信息,这在 R 中使用 dplyr::select() 很容易。例如,我想要这样的东西:df.reorder_columns(["num_wings","num_legs","num_specimen_seen"]),其中"reorder_columns"是编出来的方法。

    df = pd.DataFrame({'num_legs': [2, 4, 8, 0],
                   'num_wings': [2, 0, 0, 0],
                   'num_specimen_seen': [10, 2, 1, 8]},
                  index=['falcon', 'dog', 'spider', 'fish'])
    df[["num_wings","num_legs","num_specimen_seen"]]

我知道 python 宇宙中有一些 dplyr 复制猫,但我想避免使用这些软件包,因为它们被认为是“前沿”

您使用 .loc 访问器。这同样适用于行和列。


df = (
  pd.DataFrame({
    'num_legs': [2, 4, 8, 0],
    'num_wings': [2, 0, 0, 0],
    'num_specimen_seen': [10, 2, 1, 8]
  }, index=['falcon', 'dog', 'spider', 'fish'])
  .loc[
    ['dog', 'spider', 'falcon', 'fish'], # rows
    ["num_wings", "num_legs", "num_specimen_seen"] # columns
  ]
)

也许你可以尝试这样的事情:

import pandas as pd

df = pd.DataFrame({'num_legs': [2, 4, 8, 0],
                'num_wings': [2, 0, 0, 0],
                'num_specimen_seen': [10, 2, 1, 8]},
                index=['falcon', 'dog', 'spider', 'fish'])

columnsNames = ['num_wings', 'num_legs', 'num_specimen_seen']

df.reindex(columns=columnsNames)

或者,只需使用 sorted 方法对列顺序进行排序:

df = pd.DataFrame({'c_num_legs_2': [2, 4, 8, 0],
                   'b_num_wings_1': [2, 0, 0, 0],
                   'a_num_specimen_seen_3': [10, 2, 1, 8]},
                  index=['falcon', 'dog', 'spider', 'fish'])

cols_reorder = sorted(df.columns, key=lambda col: col.rsplit('_')[-1])
df[cols_reorder]
print(cols_reorder)
# ['b_num_wings_1', 'c_num_legs_2', 'a_num_specimen_seen_3']



print(df.sort_index(axis=1))
        a_num_specimen_seen_3  b_num_wings_1  c_num_legs_2
falcon                     10              2             2
dog                         2              0             4
spider                      1              0             8
fish                        8              0             0



print(df.sort_index(axis=1, ascending=False))
       c_num_legs_2  b_num_wings_1  a_num_specimen_seen_3
falcon             2              2                     10
dog                4              0                      2
spider             8              0                      1
fish               0              0                      8