python-3.x - 将聚合函数在 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 因素的四个因素或特定部分中的任何一个进行排序,比如中位数/计数偏好。
- 我做了一个分组并创建了一个供应商列表
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
解决方案
我在 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]])
现在问题变成了如何访问多索引级别的数据。
推荐阅读
- python - 在 django 项目中找不到页面(404)
- python - 在 POST 请求后获取响应/返回值(python 请求)
- kubernetes - 为什么几乎所有 helm 包都已弃用?
- c# - 如何将datagridview中单元格的值(布尔值)替换为字符串C#
- python - Dataflow BigQueryBatchFileLoads 无法使用 DirectRunner 找到项目 ID
- ruby-on-rails - Ruby on Rails:在 `responds_to { |f| 中设置内容类型 f.任何`
- python - 超声运动检测的一般方向 [Python]
- java - Java FixedThreadPool 中是否有最大大小参数?
- jersey - 使用球衣的 RESTfull API - 获取 HTTP 状态 500 – 内部服务器错误
- javascript - 为什么在 HTML5 中看不到输入验证表单的标题?