1

我是熊猫新手,因此请耐心对待这个问题我有一个 Df,其中包含多年来收集的年份、州和人口数据

我想找到任何一年的最大流行音乐和相应的状态

例子:

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 年和所有年份和州的最大值 我想要的是每年哪个州的人口最多

建议?

4

3 回答 3

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
于 2017-09-16T03:36:51.777 回答
1

为什么不摆脱 group by ?通过使用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
于 2017-09-16T03:53:18.063 回答
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

证明这个有效:

在此处输入图像描述

于 2017-09-16T00:03:42.767 回答