2017-08-16 161 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