我想将数据框中间的一些列移到最右边。 我可以使用代码对单独的列执行此操作:
cols=list(df.columns.values)
cols.pop(cols.index('one_column'))
df=df[cols +['one_column']]
df
但是当 2 个系列有 100 列时,单独执行效率很低。 series1_1...series1_50
和 series2_1...series2_50
位于数据框的中间。
如何通过将 2 个系列分配为列表、弹出它们然后将它们放回去来做到这一点?也许类似
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/