为什么这段代码
cdf = census_df[census_df['SUMLEV'] == 50]
cdf = cdf.apply(lambda x:x.sort_values('CENSUS2010POP', axis=0, ascending=False)).reset_index(drop=True)
cdf = cdf.groupby('STNAME').head(3)
cdf.head(20)
给出以下错误
TypeError: ("sort_values() got multiple values for argument 'axis'", 'occurred at index SUMLEV')
虽然此代码可以正常使用
cdf = census_df[census_df['SUMLEV'] == 50]
cdf = cdf.groupby('STNAME')
cdf = cdf.apply(lambda x:x.sort_values('CENSUS2010POP', axis=0, ascending=False)).reset_index(drop=True)
cdf = cdf.groupby('STNAME').head(3)
cdf.head(20)
但是在这里我需要做两次groupby,首先在排序之前和排序之后选择前3个值。我想先排序,然后分组,然后为每个组挑选3个。
可以找到csv文件here
谢谢!
答案 0 :(得分:2)
您需要更改一行:
cdf = cdf.apply(lambda x:x.sort_values('CENSUS2010POP', axis=0, ascending=False)).reset_index(drop=True)
为:
cdf = cdf.sort_values('CENSUS2010POP', ascending=False).reset_index(drop=True)
将.sort_values()
应用于数据框时,它会按您指定的列对所有列进行排序,例如CENSUS2010POP
。您不必将排序应用于所有列。