2017-09-15 67 views
1

我是新来的大熊猫,因此请善待耐心 这个问题,我有一个Df的与收集多年以来,国家和人口数据,并在许多国家后选择在不同的列GROUPBY

我想发现在任何一年中最大的流行和相应的状态

例如:

1995 Alabama xx; 1196 New York yy; 1997 Utah zz 

我做了GROUPBY并得到了人口在一年的所有状态;我该如何遍历所有这些年来

state_yearwise = df.groupby(["Year", "State"])["Pop"].max() 
state_yearwise.head(10) 
1990 Alabama  22.5 
     Arizona  29.4 
     Arkansas  16.2 
     California  34.1 

2016 South Dakota  14.1 
    Tennessee  10.2 
    Texas   17.4 
    Utah    16.1 

现在我做

df.loc[df.pop == df.pop.max(), ["year", "State", "pop"]] 

1992 Colorado 54.1 

给我的只有1年,最高超过所有年份和国家 我要的是每年哪一个国家最大人口

建议?

回答

1

这是你想要的东西:

df = pd.DataFrame([{'state' : 'A', 'year' : 2000, 'pop' : 100}, 
    {'state' : 'A', 'year' : 2001, 'pop' : 110}, 
    {'state' : 'B', 'year' : 2000, 'pop' : 210}, 
    {'state' : 'B', 'year' : 2001, 'pop' : 200}]) 
maxpop = df.groupby("state",as_index=False)["pop"].max() 
pd.merge(maxpop,df,how='inner') 

我看到df

pop state year 
0 100 A  2000 
1 110 A  2001 
2 210 B  2000 
3 200 B  2001 

而对于最后的结果:

state pop year 
0 A 110 2001 
1 B 210 2000 

证明这个工程:

enter image description here

+0

感谢表示合并的概念;但是我试过了,在“合并”之后我没有得到相同的结果。它不会像你的那样选择每年的最大状态 2月\t密西西比州\t牛顿县\t 6。1 2015年\t月\t密西西比\t帕诺拉县\t 9.4 2015年\t月\t密西西比\t门罗县\t 7.9 2015年\t月\t密西西比\t海恩兹县5.3 – Padma

+0

向我们展示你会得到什么。同时显示df和maxpop的输出。优选地以可读格式。 –

+0

我正在以适当的格式添加表格,但它正在变得越来越严重;让我再试一次 – Padma

2

您可以使用变换,以获得最大的每一列,让你可以索引DF使用弹出相应

idx = df.groupby(['year'])['pop'].transform(max) == df['pop'] 

现在IDX

df[idx] 

的你得到

指数
pop state year 
2 210 B 2000 
3 200 B 2001 

对于您更新的其他数据帧

Year State  County Pop 
0 2015 Mississippi Panola 6.4 
1 2015 Mississippi Newton 6.7 
2 2015 Mississippi Newton 6.7 
3 2015 Utah  Monroe 12.1 
4 2013 Alabama  Newton 10.4 
5 2013 Alabama  Georgi 4.2 

idx = df.groupby(['Year'])['Pop'].transform(max) == df['Pop'] 

df[idx] 

你得到

Year State County Pop 
3 2015 Utah Monroe 12.1 
4 2013 Alabama Newton 10.4 
+0

我不认为'. pop'会工作....导致pop是熊猫的一个功能... – Wen

+0

pop正在工作,但无论如何,因为pop()是一个函数,更好的做法是使用['pop'] – Vaishali

1

为什么不摆脱组?通过使用sort_valuesdrop_duplicates

df.sort_values(['state','pop']).drop_duplicates('state',keep='last') 
Out[164]: 
    pop state year 
1 110  A 2001 
2 210  B 2000 
+0

谢谢,这个作品!非常感谢你的帮助 – Padma