RError.com

RError.com Logo RError.com Logo

RError.com Navigation

  • 主页

Mobile menu

Close
  • 主页
  • 系统&网络
    • 热门问题
    • 最新问题
    • 标签
  • Ubuntu
    • 热门问题
    • 最新问题
    • 标签
  • 帮助
主页 / 问题 / 916336
Accepted
Алексей Чистов
Алексей Чистов
Asked:2020-12-06 19:34:37 +0000 UTC2020-12-06 19:34:37 +0000 UTC 2020-12-06 19:34:37 +0000 UTC

根据另一个 DataFrame 更改 DataFrame 值

  • 772

我有 2 个 dfs:

d1 = pd.DataFrame({
   'ID':['ABC123', 'ABC124', 'ABC125', 'ABC126', 'ABC127', 'ABC128', 'ABC129', 'ABC130', 'ABC131', 'ABC132'],
   'PRICE':[2365.34, 45.37, 225.25, 574.3, 23.34, 7.98, 2353.34, 79.42, 6554.09, 12.45],
   'CUR':['GBp', 'EUR', 'GBP', 'USD', 'SEK', 'CHF', 'GBp', 'CHF', 'GBp', 'CHF']
})

d2 = pd.DataFrame({
   'RECEIVED_CODE':['GBp', 'AUD'], 
   'CONVERTED_CODE':['GBP','USD'], 
   'CONVERSION_RATE':[100, 1]
})

我需要按照以下逻辑替换值:

如果值CUR1 df 与值RECEIVED_CODE2 df 相同,则需要在这一行中将自身的值替换为CUR,CONVERTED_CODE然后PRICE除以CONVERSION_RATE。

编码:

for row in d2.itertuples():
    tmp = d1[d1.CUR == row.RECEIVED_CODE]
    tmp['PRICE'] = tmp['PRICE'] / row.CONVERSION_RATE
    tmp['CUR'] = row.CONVERTED_CODE
    d1.update(tmp)

做它需要的,但是由于 d1 10k 行和 d2 - 10 行的数量,这段代码可以工作几分钟,这很长。

编码

d1['CUR'] = d1.CUR.map(d2.set_index('RECEIVED_CODE').CONVERTED_CODE).fillna(d1.CUR)

可以改成CUR,但是我没有成功CONVERTED_CODE适应这种改法。PRICE

如何优化?

提前致谢。

python
  • 1 1 个回答
  • 10 Views

1 个回答

  • Voted
  1. Best Answer
    MaxU - stop genocide of UA
    2020-12-06T21:50:54Z2020-12-06T21:50:54Z

    我会这样做:

    首先,我们使用两个 DF 中的货币创建一个辅助 DF:

    In [95]: r = (d1.rename(columns={'CUR':'RECEIVED_CODE'})
                    .reset_index()
                    .merge(d2.rename(columns={'CONVERTED_CODE':'CUR'}), on='RECEIVED_CODE'))
    
    In [96]: r
    Out[96]:
       index      ID    PRICE RECEIVED_CODE  CUR  CONVERSION_RATE
    0      0  ABC123  2365.34           GBp  GBP              100
    1      6  ABC129  2353.34           GBp  GBP              100
    2      8  ABC131  6554.09           GBp  GBP              100
    

    DataFrame.eval()允许您即时进行算术运算:

    In [99]: r.set_index('index').eval("PRICE = PRICE / CONVERSION_RATE")[['CUR','PRICE']]
    Out[99]:
           CUR    PRICE
    index
    0      GBP  23.6534
    6      GBP  23.5334
    8      GBP  65.5409
    

    让我们用这个:

    In [100]: d1.loc[r['index'], ['CUR','PRICE']] = \
                r.set_index('index').eval("PRICE = PRICE / CONVERSION_RATE")[['CUR','PRICE']]
    

    结果:

    In [101]: d1
    Out[101]:
           ID     PRICE  CUR
    0  ABC123   23.6534  GBP
    1  ABC124   45.3700  EUR
    2  ABC125  225.2500  GBP
    3  ABC126  574.3000  USD
    4  ABC127   23.3400  SEK
    5  ABC128    7.9800  CHF
    6  ABC129   23.5334  GBP
    7  ABC130   79.4200  CHF
    8  ABC131   65.5409  GBP
    9  ABC132   12.4500  CHF
    
    • 2

相关问题

Sidebar

Stats

  • 问题 10021
  • Answers 30001
  • 最佳答案 8000
  • 用户 6900
  • 常问
  • 回答
  • Marko Smith

    是否可以在 C++ 中继承类 <---> 结构?

    • 2 个回答
  • Marko Smith

    这种神经网络架构适合文本分类吗?

    • 1 个回答
  • Marko Smith

    为什么分配的工作方式不同?

    • 3 个回答
  • Marko Smith

    控制台中的光标坐标

    • 1 个回答
  • Marko Smith

    如何在 C++ 中删除类的实例?

    • 4 个回答
  • Marko Smith

    点是否属于线段的问题

    • 2 个回答
  • Marko Smith

    json结构错误

    • 1 个回答
  • Marko Smith

    ServiceWorker 中的“获取”事件

    • 1 个回答
  • Marko Smith

    c ++控制台应用程序exe文件[重复]

    • 1 个回答
  • Marko Smith

    按多列从sql表中选择

    • 1 个回答
  • Martin Hope
    Alexandr_TT 圣诞树动画 2020-12-23 00:38:08 +0000 UTC
  • Martin Hope
    Suvitruf - Andrei Apanasik 什么是空? 2020-08-21 01:48:09 +0000 UTC
  • Martin Hope
    Air 究竟是什么标识了网站访问者? 2020-11-03 15:49:20 +0000 UTC
  • Martin Hope
    Qwertiy 号码显示 9223372036854775807 2020-07-11 18:16:49 +0000 UTC
  • Martin Hope
    user216109 如何为黑客设下陷阱,或充分击退攻击? 2020-05-10 02:22:52 +0000 UTC
  • Martin Hope
    Qwertiy 并变成3个无穷大 2020-11-06 07:15:57 +0000 UTC
  • Martin Hope
    koks_rs 什么是样板代码? 2020-10-27 15:43:19 +0000 UTC
  • Martin Hope
    Sirop4ik 向 git 提交发布的正确方法是什么? 2020-10-05 00:02:00 +0000 UTC
  • Martin Hope
    faoxis 为什么在这么多示例中函数都称为 foo? 2020-08-15 04:42:49 +0000 UTC
  • Martin Hope
    Pavel Mayorov 如何从事件或回调函数中返回值?或者至少等他们完成。 2020-08-11 16:49:28 +0000 UTC

热门标签

javascript python java php c# c++ html android jquery mysql

Explore

  • 主页
  • 问题
    • 热门问题
    • 最新问题
  • 标签
  • 帮助

Footer

RError.com

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

帮助

© 2023 RError.com All Rights Reserve   沪ICP备12040472号-5