首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >python:基于匹配两个数据集中的多列合并两个数据库,并对结果应用一个脚本

python:基于匹配两个数据集中的多列合并两个数据库,并对结果应用一个脚本
EN

Stack Overflow用户
提问于 2020-08-17 16:23:33
回答 1查看 181关注 0票数 0

我有两个具有多列数据集的数据库-1(Df1)有超过几千行,dataset-2(df2)较小.300排。

我需要从df2的第3列中提取一个df2,其基础是df1中的'fruit'与df2中的'type'和df1中的'expiry''expiry'在df2中的匹配。

此外,与其直接将'Value'存储在df1中的新列中,我还需要对每行中的值执行乘法,输出将存储在df1中的新a列中。

例如,如果到期时间为2时,则该值乘以2,如果其3值乘以3.以此类推!

我能够通过使用下面的代码来解决这个问题,但是……

代码语言:javascript
复制
for i in range(0, len(df1)):
df1_value = df2.loc[(df2['type'] == df1.iloc[i]['fruit']) & (df2['expiry'] == str(df1.iloc[i]['expiry'])].iloc[0]['value']
df1.loc[i, 'df_value'] = df1.iloc[i]['expiry']*df1_value

它产生了两个问题

如果迭代抛出一个空值(例如,香蕉在-IndexError: single positional indexer is out-of-bounds

  • Because中的有效期为3,则没有“值”),则进程停止,并给出一个错误, df1有非常多的行,单独的迭代需要很长的时间。

有更好的方法来处理这件事吗?

假设df1:

代码语言:javascript
复制
fruit     expiry category
apple      3         a
apple      3         b
apple      4         c
apple      4         d
orange     2         a
orange     2         b
orange     3         c
orange     3         d
orange     3         e
banana     3         a
banana     3         b
banana     3         c
banana     4         d
pineapple  2         a
pineapple  3         b
pineapple  3         c
pineapple  4         d
pineapple  4         e

df2:

代码语言:javascript
复制
type        expiry  value
apple        2       100
apple        3       110
apple        4       120
orange       2       200
orange       3       210
orange       4       220
banana       2       310
banana       4       320
pineapple    2       410
pineapple    3       420
pineapple    4       430

输出:-revised df1

代码语言:javascript
复制
fruit       expiry  category    df_value
apple       3        a           110*3=330
apple       3        b           110*3=330
apple       4        c           120*4=480
apple       4        d           120*4=480
orange      2        a           200...
orange      2        b           200...
orange      3        c           210...
orange      3        d           210...
orange      3        e           210...
banana      3        a           0  
banana      3        b           0
banana      3        c           0
banana      4        d           320*4=1280
pineapple   2        a           410*2=820
pineapple   3        b           420...
pineapple   3        c           420...
pineapple   4        d           430....
pineapple   4        e           430....
EN

回答 1

Stack Overflow用户

发布于 2022-09-15 09:11:23

据我所知,只有在python中使用SQL才能做到这一点。SQL用于关联至少有一个可关联列的不同数据库(如果您使用过Power或Tableau,您知道我的意思),并通过它们之间的相互关系查询多个数据。我不懂这门语言,所以我帮不了你更多。

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

https://stackoverflow.com/questions/63454853

复制
相关文章

相似问题

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