python - 将特定列移至 DataFrame 的最右侧

标签 python pandas dataframe

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

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

但是当 2 个系列有 100 列时,单独执行效率很低。 series1_1...series1_50series2_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/

相关文章:

Python视频编辑——如何修剪视频

python - google.api_core.exceptions.ServiceUnavailable : 503 Name resolution failure

pandas - 如何在多索引列上使用 pandas rename()?

python-3.x - 在 Pandas 滚动中使用带参数的自定义函数

python - 如何从数据框的单元格中获取值?

python - Pandas :返回 NaN 行

python - 使用 FORTRAN 格式字符串将 Pandas DataFrame 写入文件

python utf-8编码抛出UnicodeDecodeError尽管 "errors = '替换'“

python - 将压缩的 CSV 文件转换为 Dataframe

python - 使用 Python 编辑 Parquet 文件会导致日期时间格式错误