【问题标题】:Pandas: Create DF with custom columns based on different DFPandas:使用基于不同 DF 的自定义列创建 DF
【发布时间】:2018-06-08 20:04:44
【问题描述】:

我有两个数据框,需要更改第二个以适应我第一个的格式,或者我可以完全创建一个新的数据框。

第一个数据框很简单......

stores_df = pd.DataFrame({'Stores': ['Kroger', 'United'], 'City':['Dallas','Austin']})

    Stores  City
0   Kroger  Dallas
1   United  Austin

第二个是这样格式化的(这是给我的,我改不了)...

apples_df = pd.DataFrame({'Color': ['Red', 'Green', 'Yellow','Red', 'Green', 'Yellow'], 'Store':['Kroger','Kroger','Kroger','United','United','United'], 'Ripe': ['20','17', '14', '23', '18', '0']})

    Color   Stores  Ripe
0   Red     Kroger  20
1   Green   Kroger  17
2   Yellow  Kroger  14
3   Red     United  23
4   Green   United  18
5   Yellow  United  0

我想要的数据框是两者的组合,除了颜色值 + 列标题“成熟”成为目标的列标题,并且计数被添加到第一个数据框的每个存储行。就这样……

    Stores  City    Red Ripe    Green Ripe    Yellow Ripe
0   Kroger  Dallas  20          17            14
1   United  Austin  23          18            0

我对合并/加入有点熟悉,并且对数据透视表感到困惑,足以意识到我需要一些帮助。谢谢。

【问题讨论】:

    标签: python pandas dataframe merge


    【解决方案1】:

    IIUC,merge两个df,由unstack做长到宽重塑

    stores_df.merge(apples_df,left_on='Stores',right_on='Store').\ 
       set_index(['Stores','City','Color'])['Ripe'].\
            unstack().\
             add_suffix(' Ripe').\
               reset_index()
    Out[194]: 
    Color  Stores    City Green Ripe Red Ripe Yellow Ripe
    0      Kroger  Dallas         17       20          14
    1      United  Austin         18       23           0
    

    【讨论】:

    • 随机投反对票=> 我投赞成票。 ~ 遵循 jpp 的理念 :)
    • @HarvIpan 谢谢你 :-) 。我只是好奇原因,这可能有助于我提高,签到。
    【解决方案2】:

    数据透视表 + 合并

    几个步骤:旋转apples_df,然后与stores_df合并。

    apples_pvt = apples_df.pivot_table(index='Store', columns='Color',
                                       values='Ripe', aggfunc='sum')
    
    res = stores_df.merge(apples_pvt.add_suffix(' Ripe'), left_on='Stores', right_index=True)
    
    print(res)
    
       Stores    City Green Ripe Red Ripe Yellow Ripe
    0  Kroger  Dallas         17       20          14
    1  United  Austin         18       23           0
    

    【讨论】:

    • 在这种情况下,如何将后缀“-Ripe”添加到列标题?所以他们会读“Red-Ripe”等……
    猜你喜欢
    • 2022-08-14
    • 2022-01-14
    • 2021-05-12
    • 1970-01-01
    • 2018-12-04
    • 1970-01-01
    • 2020-09-28
    • 2017-06-22
    • 1970-01-01
    相关资源
    最近更新 更多