我是熊猫的新手,所以请耐心地对待这个问题 我有一个Df,其中包含多年来在多个州收集的年份,州和人口数据
我想找到任何一年中的最大弹出和相应的状态
示例:
1995 Alabama xx; 1196 New York yy; 1997 Utah zz
我做了一个小组,并在一年内获得了所有州的人口;我如何迭代这些年
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年和最多的年份和状态 我想要的是每年哪个州有最大人口
建议?
答案 0 :(得分:2)
您可以使用transform获取每列的最大值并获取相应pop的索引
idx = df.groupby(['year'])['pop'].transform(max) == df['pop']
现在您可以使用idx索引df
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
答案 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
证明这有效:
答案 2 :(得分:1)
为什么不摆脱群体?使用sort_values
和drop_duplicates
df.sort_values(['state','pop']).drop_duplicates('state',keep='last')
Out[164]:
pop state year
1 110 A 2001
2 210 B 2000