我正在尝试比较组内和完整数据框内的按列表分组。
我用一些行程数据创建了一个数据框: ID,来源地址,目的地址,BkId,供应商,费率,已转换,BidRank,SCity,DCity,VType,MM,YYY
我正在对此进行数据分析以找到模式。
我正在寻找的模式之一是
对于每个供应商,比较所有来源/目标/ VType(熟悉程度)的已转换和赢取,以及特定来源/目标/ VType(偏好因子< / strong>)
我还想总结一下Source / Destination / VType(以中位数/最大/最小/计数的形式,比率因子)的不同组合上的费率。
我还想建立上个月的费率因子(再次以中位数/最大/最小/计数来表示 Specific Rate Factor )。
我希望能够对四个因素中的任何一个或3td因素的特定部分进行排序,例如“中位数/计数”偏好。
res1=cimsBid[(cimsBid['CVtype']=='32 FT Single-Axle 7MT - HCV') & >(cimsBid['SCity']=='Chennai') & (cimsBid['Dcity']=='Gurugram')].groupby('Vendor')
#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)
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
答案 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]])
现在,问题变为如何在多索引级别访问数据。