Pandas groupby之后的不同列上的选择

Pandas groupby之后的不同列上的选择,pandas,max,loc,Pandas,Max,Loc,我是熊猫的新手,因此请耐心对待这个问题 我有一个Df,其中包含多年来在许多州收集的年份、州和人口数据 我想找到任何一年的最大pop和相应的状态 例如: 1995 Alabama xx; 1196 New York yy; 1997 Utah zz 我做了一个群比,得到了一年内所有州的人口;我如何在这些年中进行迭代 state_yearwise = df.groupby(["Year", "State"])["Pop"].max() state_yearwise.head(10) 1990 A

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

我想找到任何一年的最大pop和相应的状态

例如:

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

建议?

这就是你想要的:

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的
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
证明这是有效的:

这就是你想要的吗:

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的
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
证明这是有效的:


您可以使用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
3   2015    Utah    Monroe  12.1
4   2013    Alabama Newton  10.4
对于您更新的其他数据帧

    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]
你得到

    pop state   year
2   210 B   2000
3   200 B   2001
    Year    State   County  Pop
3   2015    Utah    Monroe  12.1
4   2013    Alabama Newton  10.4

您可以使用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
3   2015    Utah    Monroe  12.1
4   2013    Alabama Newton  10.4
对于您更新的其他数据帧

    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]
你得到

    pop state   year
2   210 B   2000
3   200 B   2001
    Year    State   County  Pop
3   2015    Utah    Monroe  12.1
4   2013    Alabama Newton  10.4

为什么不一组一组地摆脱呢?通过使用
排序\u值
删除重复项

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

为什么不一组一组地摆脱呢?通过使用
排序\u值
删除重复项

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

感谢您展示了合并的概念;但是我试过了,在“合并”之后没有得到相同的结果。它不会像你一样选择每年的最大州数2015年2月0日密西西比州牛顿县6.1 1 2015年2月密西西比州帕诺拉县9.4 2 2015年2月密西西比州门罗县7.9 3 2015年2月密西西比州辛兹县5.3向我们展示你得到了什么。还显示df和maxpop的输出。最好是可读的格式。我正在以适当的格式添加表格,但它正在被弄乱;让我再次尝试一下(2004年)我方尝试一下(2004年)今年(2004年)年年(2004年)年(2004年)年(2004年)我再尝试一下今年今年(2004年)年(2004年)我我再尝试一下今年今年(2004年)年(2004年)年(2004年)年(2004年)年)我再尝试一下我我再尝试一下今年今年(2004年)年(2004年)年)年(2004年)今年今年今年今年今年今年)我我再尝试今年今年(2004年)年(2004年)今年今年今年今年今年今年(2004年)年)年,年,年年)我我我我方方今年今年今年(2004年)年(2004年,年)年,年,年年年年年年年年年年年年年年年年年年年年年)我我方方方方今年今年今年(2004年年)年年年年年年年年年年年年年年年年年,年年,年,年,年,年,年年年2015年犹他州门罗12.1更多2013年阿拉巴马州牛顿10.4更多感谢您展示了合并的概念;但是我试过了,在“合并”之后没有得到相同的结果。它不会像你一样选择每年的最大州数2015年2月0日密西西比州牛顿县6.1 1 2015年2月密西西比州帕诺拉县9.4 2 2015年2月密西西比州门罗县7.9 3 2015年2月密西西比州辛兹县5.3向我们展示你得到了什么。还显示df和maxpop的输出。最好是可读的格式。我正在以适当的格式添加表格,但它正在被弄乱;让我再次尝试一下(2004年)我方尝试一下(2004年)今年(2004年)年年(2004年)年(2004年)年(2004年)我再尝试一下今年今年(2004年)年(2004年)我我再尝试一下今年今年(2004年)年(2004年)年(2004年)年(2004年)年)我再尝试一下我我再尝试一下今年今年(2004年)年(2004年)年)年(2004年)今年今年今年今年今年今年)我我再尝试今年今年(2004年)年(2004年)今年今年今年今年今年今年(2004年)年)年,年,年年)我我我我方方今年今年今年(2004年)年(2004年,年)年,年,年年年年年年年年年年年年年年年年年年年年年)我我方方方方今年今年今年(2004年年)年年年年年年年年年年年年年年年年年,年年,年,年,年,年,年年年2015年犹他州门罗12.1更多2013年阿拉巴马州牛顿10.4更多我不认为
.pop
会起作用……因为pop在pandas中是一个函数……pop在起作用,但无论如何,由于pop()是一个函数,更好的做法是使用['pop']我不认为
.pop
会起作用……因为pop在pandas中是一个函数……pop在起作用,但无论如何,由于pop()是一个函数,更好的做法是使用['pop']