我想将数据框中间的某些列移到最右边。
我可以使用代码对单个列执行此操作:

cols=list(df.columns.values)
cols.pop(cols.index('one_column'))
df=df[cols +['one_column']]
df


但是,当100个2列的列(即)单独执行时,效率低下。数据框中间的series1_1... series1_50series2_1... series2_50

如何通过将两个系列分配为列表,然后将其弹出并放回去,该如何做?也许像

cols=list(df.columns.values)
series1 = list(df.loc['series1_1':'series1_50'])
series2 = list(df.loc['series2_1':'series2_50'])
cols.pop('series1', 'series2')
df=df[cols +['series1', 'series2']]


但这没用。谢谢

最佳答案

如果只想移动列,则可以这样调用concat

cols_to_shift = ['colA', 'colB']

pd.concat([
    df[df.columns.difference(cols_to_shift)],
    df[cols_to_shift]
  ], axis=1
)


或者,您可以对列进行一些列表操作。

cols_to_keep = [c for c in df.columns if c not in cols_to_shift]
df[cols_to_keep + cols_to_shift]




最小的例子

np.random.seed(0)
df = pd.DataFrame(np.random.randint(1, 10, (3, 5)), columns=list('ABCDE'))
df

   A  B  C  D  E
0  6  1  4  4  8
1  4  6  3  5  8
2  7  9  9  2  7

cols_to_shift = ['B', 'C']
pd.concat([
    df[df.columns.difference(cols_to_shift)],
    df[cols_to_shift]
  ], axis=1
)

   A  D  E  B  C
0  6  4  8  1  4
1  4  5  8  6  3
2  7  2  7  9  9




[c for c in df.columns if c not in cols_to_shift]
df[cols_to_keep + cols_to_shift]

   A  D  E  B  C
0  6  4  8  1  4
1  4  5  8  6  3
2  7  2  7  9  9

关于python - 将特定的列移到DataFrame的最右边,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58868570/

10-10 11:55