PANDAS数据框架Python:想按组进行排序

问题描述 投票:0回答:1

人口普查数据的链接

我有下面的链接,上面是一个CSV文件,其中包含了我想操作的原始数据。

census_df = df = pd.read_csv('https://raw.githubusercontent.com/Qian-Han/coursera-Applied-Data-Science-with-Python/master/Introduction-to-Data-Science-in-Python/original_data/census.csv')
sortedit = census_df.sort_values(by = ['STNAME','CENSUS2010POP'],ascending=False)

我试图按列的降序排列数据。'CENSUS2010POP'。

我还想按 "州 "的英文字母顺序排列数据,因此我在其中加入了 'STNAME' 列在上面的公式中。

但是,我只想选择 3个最高值 对于 'CENSUS2010POP' 从每个州('STNAME')。

因此,如果总共有146个州,我应该在我的新数据框架中(因此在'CENSUS2010POP'列中)有(146 x 3)行。

如果有人能帮我一把,我将非常感激。

python pandas csv dataframe series
1个回答
0
投票

试试这个。

df = census_df.groupby(["STNAME"]).apply(lambda x: x.sort_values(["CENSUS2010POP"], ascending = False)).reset_index(drop=True)

df.groupby('STNAME').head(3)[['STNAME','CENSUS2010POP']]

第一条语句返回按以下方式排序的数据框 CENSUS2010POP 在每 STNAME.

第二条语句返回前三名。


1
投票

IIUC。groupby.nalrgest 来创建一个索引过滤器,用 sort_values

df2 = df.iloc[df.groupby('STNAME')['CENSUS2010POP']\
                              .nlargest(3).index.get_level_values(1)]\
                              .sort_values(['STNAME','CENSUS2010POP'],ascending=True)

print(df['STNAME'].nunique())

51


print(df2.shape)
(152, 100)

print(df2[['STNAME','CENSUS2010POP']])

   STNAME  CENSUS2010POP
49      Alabama         412992
37      Alabama         658466
0       Alabama        4779736
76       Alaska          97581
71       Alaska         291826
...         ...            ...
3137  Wisconsin         947735
3096  Wisconsin        5686986
3182    Wyoming          75450
3180    Wyoming          91738
3169    Wyoming         563626

[152 rows x 2 columns]
© www.soinside.com 2019 - 2024. All rights reserved.