python - 在 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 | 钠 | 钠 | 钠 | 钠 |
感谢任何形式的帮助
解决方案
尝试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]
})
推荐阅读
- yaml - 版本化 yaml 文件的最佳方法是什么?
- google-cloud-platform - Terraform:未创建 google_sql_database_instance
- android - 旋转活动时如何不破坏 ViewModel
- python - 根据列表中列表中的公共元素提取最大列表
- javascript - 防止使用浏览器放大缩小javascript调整图像大小
- c - Windows 编译 v8 上的 pkg-config 错误
- javascript - 数据表不工作且不过滤数据
- python-3.x - PythonL如何输入变量然后使用它在另一个文件中执行然后打印到第一个文件?
- python - python pandas中的制表符和行分隔
- c - 我的应用程序崩溃了,没有任何错误,for循环有问题(?)