为了账号安全,请及时绑定邮箱和手机立即绑定

取三个 groupby 数据帧并连接/合并 - 但一个数据帧聚合在更高级别

取三个 groupby 数据帧并连接/合并 - 但一个数据帧聚合在更高级别

青春有我 2021-07-20 20:04:42
下午所有,我有三个大的按结果分组。简化的 df 如下所示。第一个 df 是所有客户的总 RFQ 和总 RFQ 数量,没有通过产品和货币进行细分。df1 = [('Year_Month', ['2017-11', '2017-12', '2018-01', '2018-02', '2018-05', '2018-06', '2018-07', '2018-08',]),('Client', ['RBMI', 'RBMI', 'RBMI', 'RBMI', 'QCBO', 'QCBO', 'QCBO', 'QCBO',]),('Total_RFQ_per_Client', [1, 2, 3, 4, 10, 20, 30, 40,]),('Total_RFQ_Volume_per_Client', ['1000', '2000', '3000', '4000', '10000', '20000', '30000', '40000',]),         ]# create pandas dfdf1 = pd.DataFrame.from_items(df1)df1['Total_RFQ_per_Client']=df1.Total_RFQ_per_Client.astype('int64')df1['Total_RFQ_Volume_per_Client']=df1.Total_RFQ_Volume_per_Client.astype('int64')print(df1)# df1.info()print("")  Year_Month Client  Total_RFQ_per_Client  Total_RFQ_Volume_per_Client0    2017-11   RBMI                     1                         10001    2017-12   RBMI                     2                         20002    2018-01   RBMI                     3                         30003    2018-02   RBMI                     4                         40004    2018-05   QCBO                    10                        100005    2018-06   QCBO                    20                        200006    2018-07   QCBO                    30                        300007    2018-08   QCBO                    40                        40000第二个 df 是已完成并添加了产品和货币列的所有客户的询价和询价量。print("All Clients - Done RFQ's - Done RFQ Volume - Broken down into Product and Currency",  end='\n') df2 = [('Year_Month', ['2017-11', '2018-01', '2018-01', '2018-02', '2018-05', '2018-07', '2018-08',]),('Client', ['RBMI', 'RBMI', 'RBMI', 'RBMI', 'QCBO', 'QCBO', 'QCBO',]),('Product', ['GOVT', 'GOVT', 'CORP', 'GOVT', 'GOVT', 'GOVT', 'GOVT',]),('currency_str', ['USD', 'USD', 'GBP', 'USD', 'USD', 'USD', 'USD',]),('Done_RFQ', [1, 1, 1, 1, 10, 20, 20,]),('Done_RFQ_Volume', [1000, 500, 500, 1000, 10000, 20000, 20000,]),         ]
查看完整描述

2 回答

?
MYYA

TA贡献1868条经验 获得超4个赞

我认为“加入”语句在这里会做得更好:


import pandas as pd 


df_joined = df1.set_index('Year_Month ').join(df2.set_index('Year_Month '))


df_joined = df_joined.set_index('Year_Month ').join(df3.set_index('Year_Month '))

如果您希望索引再次作为增量编号:


df_joined = df_joined.reset_index()

希望能帮助到你


查看完整回答
反对 回复 2021-07-28
?
侃侃尔雅

TA贡献1801条经验 获得超15个赞

以下合并似乎有效:


    dfTemp = pd.merge(df2, df3,  how='outer', on=['Year_Month','Client','Product','currency_str'])

    dfTemp = dfTemp.fillna(0)

    dfTemp['Total_RFQ'] = dfTemp['Done_RFQ'] + dfTemp['Not_Done_RFQ'] 

    dfTemp['Total_RFQ_Volume'] = (dfTemp['Done_RFQ_Volume']) + dfTemp['Not_Done_RFQ_Volume']

    df_Client_Product_Ccy_Hit_Rate_Volumes = pd.merge(dfTemp, df1,  how='inner', left_on=['Year_Month','Client'], right_on = ['Year_Month','Client'])



查看完整回答
反对 回复 2021-07-28
  • 2 回答
  • 0 关注
  • 172 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信