在這種情況下,你實際上並不需要一groupby
。您也沒有MultiIndex
。你可以製作一個這樣的:
import pandas
from io import StringIO
datastring = StringIO("""\
Country Metric 2011 2012 2013 2014
USA GDP 7 4 0 2
USA Pop. 2 3 0 3
GB GDP 8 7 0 7
GB Pop. 2 6 0 0
FR GDP 5 0 0 1
FR Pop. 1 1 0 5
""")
data = pandas.read_table(datastring, sep='\s\s+')
data.set_index(['Country', 'Metric'], inplace=True)
然後data
看起來是這樣的:
2011 2012 2013 2014
Country Metric
USA GDP 7 4 0 2
Pop. 2 3 0 3
GB GDP 8 7 0 7
Pop. 2 6 0 0
FR GDP 5 0 0 1
Pop. 1 1 0 5
我們得到的GDP,你可以把數據框的橫截面通過xs
方法:
data.xs('GDP', level='Metric')
2011 2012 2013 2014
Country
USA 7 4 0 2
GB 8 7 0 7
FR 5 0 0 1
這很容易,因爲你的數據已經被旋轉/取消了。如果他們不和是這樣的:
data.columns.names = ['Year']
data = data.stack()
data
Country Metric Year
USA GDP 2011 7
2012 4
2013 0
2014 2
Pop. 2011 2
2012 3
2013 0
2014 3
GB GDP 2011 8
2012 7
2013 0
2014 7
Pop. 2011 2
2012 6
2013 0
2014 0
FR GDP 2011 5
2012 0
2013 0
2014 1
Pop. 2011 1
2012 1
2013 0
2014 5
然後,您可以使用groupby
告訴你一些關於這個世界作爲一個整體:
data.groupby(level=['Metric', 'Year']).sum()
Metric Year
GDP 2011 20
2012 11
2013 0
2014 10
Pop. 2011 5
2012 10
2013 0
2014 8
或者獲得真正看中的:
data.groupby(level=['Metric', 'Year']).sum().unstack(level='Metric')
Metric GDP Pop.
Year
2011 20 5
2012 11 10
2013 0 0
2014 10 8
爲什麼我會使用'xs'方法而不是上面的解決方案? – metersk
@Barnaby因爲您的數據不需要以任何方式進行彙總。它們都是獨一無二的價值。例如,「groupby」適用於確定所有GDP或總人口中位數的總和等。您要查找的所有值都是數據框中已有的值。 –
啊,好吧。這很有道理,謝謝。 – metersk