首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在pandas Dataframe中查找互反行

在pandas Dataframe中查找互反行
EN

Stack Overflow用户
提问于 2018-11-14 20:45:46
回答 1查看 177关注 0票数 1

我有这个数据框架,并且只需要保留2列(这里是numA和numB )具有倒数值的那些行。

代码语言:javascript
复制
gpm = pd.DataFrame(data={
    'id':[1,2,3,4,5,6,7,8,9],
    'time':[150315,150315,150315,150315,150315,150315,150315,150315,150315],
    'numA':['A','D','C','B','A','C','A','E','D'],
    'numB':['B','C','B','A','B','D','B','A','A'],
    'antA':['MSPDV','VIELU','RMPC1','MJCIH','PALT2','M2PV3','MACIF','MACIF','VIELU'],
    'antB':['BPDV8','0GRI3','SSFDJ','SSFDJ','SSFDJ','CCPG1','0GRI3','SSFDJ','SSFDJ']
    })

我只想要列numA和numB互换的行。也就是说,保留出现对(A,B),(B,A)和(C,D),(D,C)的所有线。

目前,我的解决方案包括创建一个包含所有唯一标识符的列表,并遍历每一行,查看实际的合作伙伴是否在合作伙伴列表中

它非常慢..。(也许是不正确的!)

代码语言:javascript
复制
## here's my code
parties = {}
nums = gpm['numA']+gpm['numB']
for i in nums.unique():
    parties[i] = gpm['numB'][gpm['numA'] == i]
    parties[i] = gpm['numA'][gpm['numB'] == i]

new_d = gpm.iloc[[0]]
for i in np.arange(1,gpm.shape[0]):
    numa = gpm.iloc[i]['numA']
    if gpm.iloc[i]['numB'] in parties[numa]:
        new_d.append(gpm.iloc[[i]])

有没有什么精明的程序员可以帮你加快速度?要解析的实际文件是大约15 is的csv。

谢谢

EN

回答 1

Stack Overflow用户

发布于 2018-11-14 22:25:34

在您的示例中,我假设包含id=3、8和9的行(C,B)、(E,A)和(D,A)是不需要的?如果是这样,下面是通过比较numAnumB中的值来选择特定可接受组合的标准方法:

代码语言:javascript
复制
In [5]: gpm[((gpm['numA'] == 'A') & (gpm['numB'] == 'B')) |
   ...:     ((gpm['numA'] == 'B') & (gpm['numB'] == 'A')) |
   ...:     ((gpm['numA'] == 'C') & (gpm['numB'] == 'D')) | 
   ...:     ((gpm['numA'] == 'D') & (gpm['numB'] == 'C'))
   ...: ]
Out[5]:
   id    time numA numB   antA   antB
0   1  150315    A    B  MSPDV  BPDV8
1   2  150315    D    C  VIELU  0GRI3
3   4  150315    B    A  MJCIH  SSFDJ
4   5  150315    A    B  PALT2  SSFDJ
5   6  150315    C    D  M2PV3  CCPG1
6   7  150315    A    B  MACIF  0GRI3

(将结果赋给new_d)

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53300569

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档