Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python按行为分组_Python_Pandas_Group By_Ipython - Fatal编程技术网

Python按行为分组

Python按行为分组,python,pandas,group-by,ipython,Python,Pandas,Group By,Ipython,我试图理解/使用Pandas中的groupby来获取每个组中的最大计数,然后返回具有最大计数的行 df = pd.DataFrame({'name':['alpha','beta','gamma','delta','epsilon'], 'year':[2000,2001,2000,2001,2000], 'count':[1,25,11,20,8]}) df count name year 0 1 alpha 2000 1 25 beta

我试图理解/使用Pandas中的groupby来获取每个组中的最大计数,然后返回具有最大计数的行

df = pd.DataFrame({'name':['alpha','beta','gamma','delta','epsilon'], 'year':[2000,2001,2000,2001,2000], 'count':[1,25,11,20,8]})
df


    count   name    year
0   1       alpha   2000
1   25      beta    2001
2   11      gamma   2000
3   20      delta   2001
4   8       epsilon 2000

df.groupby('year').max()

        count   name
year        
2000    11      gamma
2001    25      delta
我是按年份分组的,但我希望输出如下所示:

        count   name
year        
2000    11      gamma
2001    25      beta
因此,我想根据最大计数按“年”返回每个组的整行。我也不清楚为什么2001年会返回delta而不是beta,正如我所期望的那样。

您可以使用idxmax收集最大行的索引,然后使用df.iloc选择行:

In [73]: df.iloc[df.groupby('year')['count'].idxmax()].set_index('year')
Out[73]: 
      count   name
year              
2000     11  gamma
2001     25   beta
请注意,df.groupby'year'.max正在查找每列的最大值-计数和名称。这就是为什么在名称列中将delta选为max

如果您只对最大计数感兴趣,请使用

df.groupby('year')['count'].max()
groupby'year'是一个DataFrameGroupBy对象。 groupby'year'['count']是一个SeriesGroupBy对象。SeriesGroupBy对象上对max或idxmax的调用仅使用count列中的值。此限制GroupBy对象的方法是。

您可以使用general GroupBy.apply并返回其计数等于组最大计数的行。与另一个答案一样,set_索引用于删除额外年份列


它给出delta的原因是,当您直接对groupby对象执行.max操作时,它会分别为每列计算max。delta在字母表中较晚,因此大于beta。@unubtu:您能解释一下:为什么我的命令返回delta而不是beta吗?那么df.groupby'year'['count']是做什么的呢?我理解df.groupby'year',但我无法理解['count']部分 >>> df = pd.DataFrame({'name':['alpha','beta','gamma','delta','epsilon'], 'year':[2000,2001,2000,2001,2000], 'count':[1,25,11,20,8]}) >>> df.groupby("year").apply(lambda g: g[g["count"] == g["count"].max()]).set_index("year") count name year 2000 11 gamma 2001 25 beta