首页 > 解决方案 > 在 Pandas 中向左翻转和移动多列数据

问题描述

这是一个员工 - 主管映射数据。

我想翻转然后将整列向左移动。只有数据应该向左移动 1 次并且列应该是固定的。你能告诉我我该怎么做吗?

输入:自下而上的方法

Emp_ID Sup_1 ID Sup_2 ID Sup_3 ID Sup_4 ID
123 234 456 678 789
234 456 678 789
456 678 789
678 789
789

输出:自上而下的方法

Emp_ID Sup_1 ID Sup_2 ID Sup_3 ID Sup_4 ID
123 789 678 456 234
234 789 678 456
456 789 678
678 789
789

感谢任何形式的帮助

标签: pythonpandasdataframe

解决方案


尝试fliplr

# Get numpy structure
x = df.loc[:, 'Sup_1 ID':].to_numpy()
# flip left to right
a = np.fliplr(x)
# Overwrite not NaN values in x with not NaN in a
x[~np.isnan(x)] = a[~np.isnan(a)]
# Update DataFrame
df.loc[:, 'Sup_1 ID':] = x

df

   Emp_ID  Sup_1 ID  Sup_2 ID  Sup_3 ID  Sup_4 ID
0     123     789.0     678.0     456.0     234.0
1     234     789.0     678.0     456.0       NaN
2     456     789.0     678.0       NaN       NaN
3     678     789.0       NaN       NaN       NaN
4     789       NaN       NaN       NaN       NaN

DataFrame 构造函数和导入:

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'Emp_ID': [123, 234, 456, 678, 789],
    'Sup_1 ID': [234.0, 456.0, 678.0, 789.0, np.nan],
    'Sup_2 ID': [456.0, 678.0, 789.0, np.nan, np.nan],
    'Sup_3 ID': [678.0, 789.0, np.nan, np.nan, np.nan],
    'Sup_4 ID': [789.0, np.nan, np.nan, np.nan, np.nan]
})

推荐阅读