【问题标题】:Transforming pandas dataframe while creating new columns在创建新列时转换熊猫数据框
【发布时间】:2019-03-10 03:37:12
【问题描述】:

我有一个熊猫数据框df,其值如下:

HE  PR  MastLoc Loc     Type    Qty
1   2   E1      LocA    TC      3
2   23  E1      LocA    TB      18
3   17  E1      LocA    TC      11
3   2   E1      LocB    TC      3
24  3   E1      LocB    TB      4

我想从上面的数据框创建以下数据框df

MastLoc Loc     Type    Qty1    PR1   Qty2  PR2   Qty3  PR3  Qty24  PR24
E1      LocA    TC      3       2                 11    17      
E1      LocA    TB                    18    23              
E1      LocB    TC                                3     2       
E1      LocB    TB                                            4      3

通过将列名QtyPR 与列HE 中的整数值连接起来创建新列(列HE 始终具有整数值)。

df2 基本上具有具有 MastLoc, Loc and Type 唯一组合的行,并且列 Qty and HE 中的所有值都已移动到使用列 HE 中的整数创建的新列中。

到目前为止,我已经完成了:

df['colQty'] = ['Qty' + str(x) for x in df['HE'].tolist()]
df['colPR'] = ['PR' + str(x) for x in df['HE'].tolist()]

我无法想出一个干净的方法来做进一步的事情。

【问题讨论】:

    标签: pandas python-3.5


    【解决方案1】:

    pivot_table 与多个索引调整一起使用

    s=pd.pivot_table(df,index=['MastLoc','Loc','Type'],columns=['HE'],values=['PR','Qty'],aggfunc='sum')
    s.columns=s.columns.map('{0[0]}{0[1]}'.format) 
    s
    Out[895]: 
                       PR1   PR2   PR3  PR24  Qty1  Qty2  Qty3  Qty24
    MastLoc Loc  Type                                                
    E1      LocA TB    NaN  23.0   NaN   NaN   NaN  18.0   NaN    NaN
                 TC    2.0   NaN  17.0   NaN   3.0   NaN  11.0    NaN
            LocB TB    NaN   NaN   NaN   3.0   NaN   NaN   NaN    4.0
                 TC    NaN   NaN   2.0   NaN   NaN   NaN   3.0    NaN
    

    【讨论】:

    • 是否可以重组为:PR1、Qty1、PR2、Qty2等?
    • @Zanam 添加 sort_index 。比如 s=s.sort_index(level=1,axis=1)
    猜你喜欢
    • 2016-08-28
    • 1970-01-01
    • 2016-08-07
    • 2021-05-27
    • 1970-01-01
    • 1970-01-01
    • 2019-10-12
    • 2021-04-03
    相关资源
    最近更新 更多