Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.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_Sorting_Pandas_Grouping - Fatal编程技术网

分组和排序后:为什么我的python数据框列名是行,而不是一行?

分组和排序后:为什么我的python数据框列名是行,而不是一行?,python,sorting,pandas,grouping,Python,Sorting,Pandas,Grouping,首先,我不确定我这样做是最好的方式,所以我很感激 我创建了一个python数据框架: raw_data={'Name':pd.系列(['david','andrew','calvin','david','calvin','david','david','index='a','b','c','d','e','f']),'Age':pd.系列([35,40,5,35,35],index=[a','b','c','d','e','f']) df=pd.DataFrame(原始数据,列=['Name',

首先,我不确定我这样做是最好的方式,所以我很感激

我创建了一个python数据框架:
raw_data={'Name':pd.系列(['david','andrew','calvin','david','calvin','david','david','index='a','b','c','d','e','f']),'Age':pd.系列([35,40,5,35,35],index=[a','b','c','d','e','f'])
df=pd.DataFrame(原始数据,列=['Name','Age'])

我现在要分组,还要排序(基于“Name”出现次数的频率)并返回前2条记录。即以下输出:

  Name Count
david      3
calvin     2
我首先添加一个“计数”列:

给出:

     Name   Age Count
a   david   35  3
b   andrew  39  1
c   calvin  5   2
d   david   34  3
e   calvin  5   2
f   david   35  3
然后,我可以使用以下代码对其进行分组和排序:

df[['Name','Count']].groupby('Name').count().sort_values('Count',ascending=0).head(2)
这就是我的问题所在,数据是“正确的”,但列标题似乎在单独的行中…请参见屏幕截图:

我有三个问题

1) 为什么会发生这种情况

2) 我怎样才能修好它

3) 有更好的方法吗

谢谢

[编辑]-我已经回答了问题2(如何修复)。显然,我需要重置索引:

df.reset_index()
我很想知道,为什么还有更好的方法

您可以使用和:


在代码上调用
reset\u index()
有什么问题吗?没有。。。我只是没有意识到我需要。。。只是想知道为什么索引在第一时间被更改?您的索引被设置为groupby和聚合列,这是预期的operationOK。谢谢这很有帮助。
df.reset_index()
print df

#     Name  Age
#a   david   35
#b  andrew   40
#c  calvin    5
#d   david   35
#e  calvin    5
#f   david   35

df1 =  df.groupby('Name').apply(len)
print df1

#Name
#andrew    1
#calvin    2
#david     3
#dtype: int64
print df1.nlargest(2).reset_index(name='Count')

#     Name  Count
#0   david      3
#1  calvin      2