2017-08-16 127 views
2

我有两只大熊猫dataframes:乘两只熊猫dataframes

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 

我如何与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 

回答

4

,我们可以这样来做:

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 
+1

为什么要投票?请给出意见。 –

+0

@斯科特波士顿,是的,知道这将是有趣的; ;-) – MaxU

+2

非常优雅。你可以'd1 [d2 ['name']] * = d2.set_index('name')['item']'也许? – Zero

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 
+0

OP,最好接受@MaxU的回答,他的回答比较整齐,如果你喜欢我的回答,可以投票赞成 – Wen

+0

谢谢!是的,我实际上发布了一个小问题的变体。我实际上有一个所有50个州的数据框,所以输入它们全是一种痛苦。 – arqchicago

+1

@arqchicago同样的解决方案在这里,将'[''NY','PA','MD']'改为'd2 ['name']' – Wen