将两个熊猫数据帧相乘

arq*_*ago 2 python dataframe pandas

我有两个熊猫数据框:

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
Run Code Online (Sandbox Code Playgroud)

df2

  name  item
0   NY  1000
1   PA   500
2   MD   250
Run Code Online (Sandbox Code Playgroud)

如何根据状态缩写使用 df1 浮点值在 df2 中使用多个“项目”值?输出应该是:

   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
Run Code Online (Sandbox Code Playgroud)

Max*_*axU 5

我们可以这样做:

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
Run Code Online (Sandbox Code Playgroud)

或者来自@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
Run Code Online (Sandbox Code Playgroud)

  • 十分优雅。也许你可以`d1[d2['name']] *= d2.set_index('name')['item']`? (2认同)