首页 > 解决方案 > 将聚合函数在 Dataframe 中的组上的输出与对整个 Dataframe 的搜索输出相结合

问题描述

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

我创建了一个包含一些旅行数据的数据框:Id、Sourced Address、Destination Address、BkId、Vendor、Rate、Converted、BidRank、SCity、DCity、VType、MM、YYY

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

我正在寻找的模式之一是对于每个供应商,Converted and Won over all Source/Destination/VType ( Familiarity Factor ) 和 Converted and Won/Not Won over specific Source/Destination/VType ( Preference Factor ) I还想总结 Source/Destination/VType 的不同组合的 Rates(按照 Median/Max/Min/Count 的速率因子)。
我还想确定上个月的比率因子(具体比率因子再次以中位数/最大值/最小值/计数表示)。我希望能够对 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

标签: python-3.xpandas

解决方案


我在 agg 输出上尝试了 shape 并意识到它已经是一个 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]])

现在问题变成了如何访问多索引级别的数据。


推荐阅读