首页 > 解决方案 > 熊猫从重复的行值中交换列值

问题描述

我有重复部分的数据,如下所示:

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

标签: pythonpython-3.xexcelpandas

解决方案


你做了大部分工作。唯一缺少的是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

推荐阅读