python - 熊猫从重复的行值中交换列值
问题描述
我有重复部分的数据,如下所示:
Part | Location | ONHand
A | XY | 5
A | XW | 4
B | XC | 6
B | XV | 8
C | XQ | 9
我正在尝试将其全部转换为每个零件的一行,列出每个位置的所有位置和手头数量。
我尝试使用此代码
df_f = df.assign(cc=df.groupby('Part').cumcount()+1).set_index(['Part', 'cc']).unstack()
df_f.columns = [f'{col[0]}{col[1]}' for col in df_f.columns]
df_f.to_csv('parts_multi_location.csv')
但问题是它返回位置 1、2、3,然后返回 ONHand 1、2、3 等等。
我需要最终结果来返回 Location 1、Onhand 1、Location 2、Onhand 2,因此标题应如下所示:
Part | Location_1 | Onhand_1 | Location 2| Onhand 2
A | XY | 5 | XW | 4
B | XC | 6 | XV | 8
C | XQ | 9
解决方案
你做了大部分工作。唯一缺少的是sort_index
:
df_f = df.assign(cc=df.groupby('Part').cumcount()+1).set_index(['Part', 'cc']).unstack()
# this is what you are missing
df_f = df_f.sort_index(level=(1,0), axis=1)
df_f.columns = [f'{col[0]}{col[1]}' for col in df_f.columns]
输出:
Location1 ONHand1 Location2 ONHand2
Part
A XY 5.0 XW 4.0
B XC 6.0 XV 8.0
C XQ 9.0 NaN NaN
推荐阅读
- sql - 在选择查询中替换列中的值
- ios - 如何映射 Promise
保证 ? - tensorflow - 具有 is_training 'true' 和 'false' 的 Batchnorm 的不同行为 - 冻结模型的准确性不同
- java - Redis 问题考虑在你的配置中定义一个 'org.springframework.data.redis.core.HashOperations' 类型的 bean
- firebase - 无法在 Windows 上本地使用 Firebase Cloud 功能
- html - UL 元素的背景颜色不起作用
- .net - 使用 SOAP 消息将加密改进到 .NET 富客户端应用程序到后端服务器
- java - 如何从列表中存储多个项目的全局数组以供以后使用
- android - 可以保持前台服务处于活动状态以等待互联网连接吗?
- spring-cloud-dataflow - 是否需要为 DataFlowTemplate.streamOperations().updateStream(..) 方法设置 PackageIdentifier 实例的 `packageVersion`?