Python pandas-如何从提供的数据框中提取前三行
我的熊猫数据帧df可以产生如下结果:Python pandas-如何从提供的数据框中提取前三行,python,pandas,pandas-groupby,Python,Pandas,Pandas Groupby,我的熊猫数据帧df可以产生如下结果: grouped = df[(df['X'] == 'venture') & (df['company_code'].isin(['TDS','XYZ','UVW']))].groupby(['company_code','sector'])['X_sector'].count() 其结果如下: company_code sector TDS Meta
grouped = df[(df['X'] == 'venture') & (df['company_code'].isin(['TDS','XYZ','UVW']))].groupby(['company_code','sector'])['X_sector'].count()
其结果如下:
company_code sector
TDS Meta 404
Electrical 333
Mechanical 533
Agri 453
XYZ Sports 331
Electrical 354
Movies 375
Manufacturing 355
UVW Sports 505
Robotics 345
Movies 56
Health 3263
Manufacturing 456
Others 524
Name: X_sector, dtype: int64
我想要的是公司代码中的前三个部门。
怎么做?您必须在此处链接一个groupby。考虑这个例子:
import pandas as pd
import numpy as np
np.random.seed(111)
names = [
'Robert Baratheon',
'Jon Snow',
'Daenerys Targaryen',
'Theon Greyjoy',
'Tyrion Lannister'
]
df = pd.DataFrame({
'season': np.random.randint(1, 7, size=100),
'actor': np.random.choice(names, size=100),
'appearance': 1
})
s = df.groupby(['season','actor'])['appearance'].count()
print(s.sort_values(ascending=False).groupby('season').head(1)) # <-- head(3) for 3 values
其中s在4处被剪裁
season actor
1 Daenerys Targaryen 2
Jon Snow 4
Robert Baratheon 2
Theon Greyjoy 3
Tyrion Lannister 4
2 Daenerys Targaryen 4
Jon Snow 3
Robert Baratheon 1
Theon Greyjoy 5
Tyrion Lannister 3
3 Daenerys Targaryen 2
Jon Snow 1
Robert Baratheon 6
Theon Greyjoy 3
Tyrion Lannister 3
4 ...
当有简单的代码时,为什么您希望事情变得复杂:
Z = df.groupby('country_code')['sector'].value_counts().groupby(level=0).head(3).sort_values(ascending=False).to_frame('counts').reset_index()
Z
@RahulAgarwal-共享用于获取输出的内容。考虑到这是一个系列,我尝试了:grouped.sort_valuesaxis=0,ascending=False这会改变组的输出请看:尝试这个:grouped=df[df['X']='venture'&df['company_code'].isin['USA','IND','GBR']].groupby['company__code','main_扇区']['X_扇区'].count.reset_indexname='count'.sort_values['count',['count',',上升=False这是有效的。但它给出了计数的排序顺序。这是一部分。第二部分是从每个小组安排中选出前两名。我很高兴能提供帮助。快乐编码@AntonvBR,很好的例子+1.
Z = df.groupby('country_code')['sector'].value_counts().groupby(level=0).head(3).sort_values(ascending=False).to_frame('counts').reset_index()
Z