将数据框内某组上的汇总函数的输出与整个数据框内的搜索输出进行合并

时间:2019-06-10 07:46:24

标签: python-3.x pandas

我正在尝试比较组内和完整数据框内的按列表分组。

我用一些行程数据创建了一个数据框: ID,来源地址,目的地址,BkId,供应商,费率,已转换,BidRank,SCity,DCity,VType,MM,YYY

我正在对此进行数据分析以找到模式。

我正在寻找的模式之一是 对于每个供应商,比较所有来源/目标/ VType(熟悉程度)的已转换和赢取,以及特定来源/目标/ VType(偏好因子< / strong>) 我还想总结一下Source / Destination / VType(以中位数/最大/最小/计数的形式,比率因子)的不同组合上的费率。
我还想建立上个月的费率因子(再次以中位数/最大/最小/计数来表示 Specific Rate Factor )。 我希望能够对四个因素中的任何一个或3td因素的特定部分进行排序,例如“中位数/计数”偏好。

  1. 我进行了分组,并创建了供应商列表
res1=cimsBid[(cimsBid['CVtype']=='32 FT Single-Axle 7MT - HCV') & >(cimsBid['SCity']=='Chennai') & (cimsBid['Dcity']=='Gurugram')].groupby('Vendor')
  1. 获得前两个因素:
    #capture all vendors from the grouped by tuple
    L1Res1=[]
    for name,group in res1:
        L1Res1.append(name)
    #count for familiarity, preference, history
    L1Won=0;
    L1Bid=0;
    L1WonRV=0;
    Results=[]
    for i in range(len(L1Res1)):
        L1Won=len(cimsBid[(cimsBid['Vendor']==L1Res1[i]) & (cimsBid['Converted']=='Yes')])
    L1Bid=len(cimsBid[(cimsBid['Vendor']==L1Res1[i]) & (cimsBid['SCity']=='Chennai') & (cimsBid['Dcity']=='Gurugram') & (cimsBid['CVtype']=='32 FT Single-Axle 7MT - HCV')]) 
    L1WonRV=len(cimsBid[(cimsBid['Vendor']==L1Res1[i]) & (cimsBid['SCity']=='Chennai') & (cimsBid['Dcity']=='Gurugram') & (cimsBid['CVtype']=='32 FT Single-Axle 7MT - HCV') & (cimsBid['BidRank']==1)])
    Results.append(L1Res1[i], L1Won, L1Bid, L1WonRV)
  1. 按数据分组汇总
    res1.agg({'Rate':[sum,min,max,np.median],'BookingID':"count"})

我现在有两个不同的数据输出: 一个是列表列表:

    [['BABA KASI NATH ROADWAYS', 23, 2, 2], ['Choudhary Container Service Naveen D', 3, 1, 1], ['KULDEEP CONTAINER SERVICES', 7, 1, 0], ['NTEX TRANSPORTATION SERVICES PRIVATE LIMITED  ', 80, 2, 0], ['Payal Cargo Carrier', 28, 1, 1], ['RUTE LOGISTICS PRIVATE LIMITED', 55, 1, 1], ['S M ENTERPEISES', 2, 2, 0], ['S.M EXPRESS', 2, 1, 0], ['SREE BALAJI COINTAINER CARRIER', 19, 1, 0], ['Sharma Transport Company', 11, 1, 1], ['TAMNNA CARGO MOVERS', 2, 2, 1], ['VASHU CONTAINER SERVICE CHENNAI ', 5, 1, 1]]

,另一个是聚合函数输出。

我不太了解如何将两者优雅地结合在一起。如何使用列表和汇总输出创建新的数据框? 总输出:


                                             Rate           BookingID
                                sum min max median             count
Vendor                  
BABA KASI NATH ROADWAYS.    118000.0    57000.0 61000.0 59000.0 2
Choudhary Container S        60000.0    60000.0 60000.0 60000.0 1
KULDEEP CONTAINER SERVICES   60000.0    60000.0 60000.0 60000.0 0

1 个答案:

答案 0 :(得分:0)

我尝试对agg输出进行整形,并意识到它已经是一个DataFrame! 因此,我刚刚将“供应商”名称重新添加为一列:

out1=res1.agg({'Rate':[sum,min,max,np.median],'BookingID':"count"})
out1['Vendor']=L1Res1
out1.columns

MultiIndex(levels=[['Rate', 'BookingID', 'Vendor'], ['count', 'max', 'median', 'min', 'sum', '']],
           codes=[[0, 0, 0, 0, 1, 2], [4, 3, 1, 2, 0, 5]])

现在,问题变为如何在多索引级别访问数据。