PANDAS dataframe python:想要按组对值进行排序
PANDAS dataframe python: wanting to sort values by group
我有以下 link 以上的 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'.
降序排列数据
我还想按字母顺序 'state' 对数据进行排序,因此我在上面的公式中包括了 'STNAME' 列。
但是,我只想 select 每个州的 3 个最高值 'CENSUS2010POP' ( 'STNAME')。
因此,如果总共有 146 个州,我应该在我的新数据框中(因此在 'CENSUS2010POP' 列中)有 (146 x 3) 行。
如果有人能帮助我,我将不胜感激?
试试这个:
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']]
每个 STNAME
.
中按 CENSUS2010POP
排序的第一个语句 returns 数据帧
第二条语句returns前3.
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]
我有以下 link 以上的 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'.
降序排列数据我还想按字母顺序 'state' 对数据进行排序,因此我在上面的公式中包括了 'STNAME' 列。
但是,我只想 select 每个州的 3 个最高值 'CENSUS2010POP' ( 'STNAME')。
因此,如果总共有 146 个州,我应该在我的新数据框中(因此在 'CENSUS2010POP' 列中)有 (146 x 3) 行。
如果有人能帮助我,我将不胜感激?
试试这个:
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']]
每个 STNAME
.
CENSUS2010POP
排序的第一个语句 returns 数据帧
第二条语句returns前3.
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]