首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python --我应该按照自己的思维方式迭代行吗?还是不同的计划?

Python --我应该按照自己的思维方式迭代行吗?还是不同的计划?
EN

Stack Overflow用户
提问于 2019-03-26 17:34:40
回答 1查看 59关注 0票数 0

我有table1,它可以从<100行到大约100 000行不等。它包含22列,其中之一是包含字符串的描述,我想在其中搜索一些术语。

代码语言:javascript
复制
table1
+----------+--------+--------+--------+-------------+------+-------+-------+
| UniqueId | Cat1Id | Cat2Id | Cat3Id |    Col4     | Col5 | Col21 | Col22 |
+----------+--------+--------+--------+-------------+------+-------+-------+
|        1 |    123 |        |     33 | Description |      |       |       |
|        2 |     11 |     22 |        | Description |      |       |       |
|        3 |     22 |     22 |     33 | Description |      |       |       |
|        4 |     33 |        |    455 | Description |      |       |       |
|        5 |    111 |        |        | Description |      |       |       |
|          |        |        |        |             |      |       |       |
+----------+--------+--------+--------+-------------+------+-------+-------+

下面的table2包含我想要在上面的Col4中根据Id搜索的子字符串,这可以包含数百行。

代码语言:javascript
复制
table2
+--------+--------+--------+------+------+------+
| Cat1Id | Cat2Id | Cat3Id | Term | Val1 | Val2 |
+--------+--------+--------+------+------+------+
|    123 |        |     33 | abc  |  555 |   66 |
|    123 |        |     33 | bca  |  444 |   55 |
|     11 |     22 |        | blah |  888 |   77 |
|     33 |        |    455 | dddd |  999 |   77 |
|     33 |        |    455 | aaaa |  777 |   22 |
|        |        |        |      |      |      |
+--------+--------+--------+------+------+------+

我需要为Val1中的每一行保存Val2和table1。所以最后,我想要的是:

代码语言:javascript
复制
table3 - final
+----------+--------+--------+--------+-------------+------+------+------+
| UniqueId | Cat1Id | Cat2Id | Cat3Id |    Col4     | Term | Val1 | Val2 |
+----------+--------+--------+--------+-------------+------+------+------+
|        1 |    123 |        |     33 | Description | abc  |  555 |   66 |
|        1 |    123 |        |     33 | Description | bca  |  444 |   55 |
|        2 |     11 |     22 |        | Description | blah |  888 |   77 |
|        4 |     33 |        |    455 | Description | dddd |  999 |   77 |
|        4 |     33 |        |    455 | Description | aaaa |  777 |   22 |
|          |        |        |        |             |      |      |      |
+----------+--------+--------+--------+-------------+------+------+------+

我的计划是这样做:

  1. 对于每个唯一的Cat1,2,3组合在table2中,查询table1中包含Cat1Id、Cat2Id、Cat3Id的行子集。
  2. 返回到table2,创建一个以术语作为键,Val1和Val2作为值的字典。
  3. 迭代上面#1中的行,搜索每个术语的每个描述。如果我被击中,然后抓住该行,分配Val1和Val2,并将所有这些数据附加到一个新的df中。重复一遍。

有更快的方法吗?如果我有100 K行,根据你的经验,这是慢的还是好的?几分钟的跑步时间对我来说是可以的。

EN

回答 1

Stack Overflow用户

发布于 2019-03-27 15:37:27

这可能是你要找的东西吗?您可以查看合并101以便获得更多选项(Pandas Merging 101)

代码语言:javascript
复制
mrg = pd.merge(df1, df2[['Cat1Id', 'Cat2Id', 'Cat3Id','Val1', 'Val2']], how='left', left_on=[
               'Cat1Id', 'Cat2Id', 'Cat3Id'], right_on=['Cat1Id', 'Cat2Id', 'Cat3Id'])

mrg.dropna()

    UniqueId   Cat1Id    Cat2Id    Cat3Id       Col4       Val1   Val2 
0  1           123                33         Description   555    66   
1  1           123                33         Description   444    55   
2  2           11       22                   Description   888    77   
4  4           33                 455        Description   999    77   
5  4           33                 455        Description   777    22
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/55363151

复制
相关文章

相似问题

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