使用括号可以很容易地更改pandas数据帧中列的顺序(请参阅下文,我在其中切换前两列(。然而,我找不到任何关于如何使用方法链来实现这一点的信息,这在R中使用dplyr::select()
很容易。例如,我想要这样的东西:df.reorder_columns(["num_wings","num_legs","num_specimen_seed"](,其中";列的排序";是一种虚构的方法。
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