【问题标题】:multiply two pandas dataframes将两个熊猫数据框相乘
【发布时间】:2018-01-24 19:09:45
【问题描述】:

我有两个熊猫数据框:

df1

   id        type    NY    PA    MD
0  90  superurban   0.1   0.1  0.08
1  88       urban   0.1  0.08  0.08
2  75    suburban  0.06  0.04  0.04
3  60       rural  0.04  0.02  0.02

df2

  name  item
0   NY  1000
1   PA   500
2   MD   250

如何根据州缩写将 df2 中的多个“项目”值与 df1 浮点值结合起来?输出应该是:

   id  type         NY    PA   MD
0  90  superurban   100   50   20
1  88  urban        100   40   20
2  75  suburban      60   20   10
3  60  rural         40   10    5

【问题讨论】:

    标签: python pandas dataframe


    【解决方案1】:

    我们可以这样做:

    In [112]: d1[['NY','PA','MD']] *= d2.set_index('name')['item']
    
    In [113]: d1
    Out[113]:
       id        type     NY    PA    MD
    0  90  superurban  100.0  50.0  20.0
    1  88       urban  100.0  40.0  20.0
    2  75    suburban   60.0  20.0  10.0
    3  60       rural   40.0  10.0   5.0
    

    much better variant from @JohnGalt:

    In [118]: d1[d2['name']] *= d2.set_index('name')['item']
    
    In [119]: d1
    Out[119]:
       id        type     NY    PA    MD
    0  90  superurban  100.0  50.0  20.0
    1  88       urban  100.0  40.0  20.0
    2  75    suburban   60.0  20.0  10.0
    3  60       rural   40.0  10.0   5.0
    

    【讨论】:

    • @ScottBoston,是的,知道会很有趣... ;-)
    • 非常优雅。你可以d1[d2['name']] *= d2.set_index('name')['item'] 吗?
    • 谢谢!确实,这些都是非常优雅的解决方案!
    【解决方案2】:

    或者你可以使用mul;

    df1[['NY','PA','MD']]=(df1[['NY','PA','MD']].T.reset_index().drop('index',1)).mul(df2.item,axis='index').T
    
    Out[888]: 
       id        type     NY    PA    MD
    0  90  superurban  100.0  50.0  20.0
    1  88       urban  100.0  40.0  20.0
    2  75    suburban   60.0  20.0  10.0
    3  60       rural   40.0  10.0   5.0
    

    【讨论】:

    • OP,你最好接受@MaxU的回答,他的回答更简洁,如果你喜欢我的回答,你可以点赞
    • 谢谢!是的,我实际上发布了这个问题的一个小变种。我实际上有一个包含所有 50 个状态的数据框,因此将它们全部输入出来有点痛苦。
    • @arqchicago 相同的解决方案,将['NY','PA','MD'] 更改为d2['name']
    猜你喜欢
    • 2020-04-06
    • 1970-01-01
    • 1970-01-01
    • 2021-06-18
    • 2018-01-12
    • 2013-11-03
    • 2022-01-23
    • 1970-01-01
    • 2017-09-28
    相关资源
    最近更新 更多