ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

python – 在pandas数据帧上执行复杂搜索的最快方法

2019-09-30 06:57:12  阅读:218  来源: 互联网

标签:python pandas binary-search-tree


我试图找出在熊猫数据帧上执行搜索和排序的最快方法.下面是我想要完成的数据帧之前和之后.

之前:

flightTo  flightFrom  toNum  fromNum  toCode  fromCode
   ABC       DEF       123     456     8000    8000
   DEF       XYZ       456     893     9999    9999
   AAA       BBB       473     917     5555    5555
   BBB       CCC       917     341     5555    5555

搜索/排序后:

flightTo  flightFrom  toNum  fromNum  toCode  fromCode
   ABC       XYZ       123     893     8000    9999
   AAA       CCC       473     341     5555    5555

在这个例子中,我基本上试图过滤掉终端目的地之间存在的“航班”.这应该通过使用某种drop duplicates方法来完成,但让我感到困惑的是如何处理所有列.二元搜索是否是实现此目的的最佳方法?提示赞赏,努力想出这个.

可能的边缘情况:

如果数据已切换且我们的终端连接位于同一列中会怎样?

flight1  flight2      1Num    2Num     1Code   2Code
   ABC       DEF       123     456     8000    8000
   XYZ       DEF       893     456     9999    9999

搜索/排序后:

flight1  flight2      1Num    2Num     1Code   2Code
   ABC       XYZ       123     893     8000    9999

这种情况在逻辑上不应该发生.毕竟你怎么去DEF-ABC和DEF-XYZ?你不能,但’终点’仍然是ABC-XYZ

解决方法:

这是网络问题,所以我们使用networkx,注意,这里你可以有两个以上的站点,这意味着你可以有一些像NY-DC-WA-NC的情况

import networkx as nx
G=nx.from_pandas_edgelist(df, 'flightTo', 'flightFrom')

# create the nx object from pandas dataframe

l=list(nx.connected_components(G))

# then we get the list of components which as tied to each other , 
# in a net work graph , they are linked 
L=[dict.fromkeys(y,x) for x, y in enumerate(l)]

# then from the above we can create our map dict , 
# since every components connected to each other , 
# then we just need to pick of of them as key , then map with others

d={k: v for d in L for k, v in d.items()}

# create the dict for groupby , since we need _from as first item and _to as last item 
grouppd=dict(zip(df.columns.tolist(),['first','last']*3))
df.groupby(df.flightTo.map(d)).agg(grouppd) # then using agg with dict yield your output 

Out[22]: 
         flightTo flightFrom  toNum  fromNum  toCode  fromCode
flightTo                                                      
0             ABC        XYZ    123      893    8000      9999
1             AAA        CCC    473      341    5555      5555

安装网络x

>点子:pip install networkx
> Anaconda:conda install -c anaconda networkx

标签:python,pandas,binary-search-tree
来源: https://codeday.me/bug/20190930/1835141.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有