1
采取有序的子集,我有一个大表看起来是这样的:如何从大熊猫多级数据帧
上图显示只有表的前一部分。
现在我想在列“201723”表进行降序排列,并从整个表只取前5行。
我尝试下面的代码:
def func(x):
return x.sort_values(by='201723',ascending=False)[:5]
bcom_hang_tbl.groupby(['h_platformid', 'model']).apply(func)
导致:![在这里输入的形象描述] [2]
[2]
这不是我想要的因为h_platformid和模型索引是重复的。
我试过一个又一个这样的:
def func(x):
return x.sort_values(by='201723',ascending=False)[:5]
bcom_hang_tbl.groupby(['h_platformid', 'model'], as_index=False).apply(func)
而且我得到一个更好的结果:![在这里输入的形象描述] [3] [3]
,但它仍然是不由于新增加的整数索引令人满意,如上图红色所示。
我终于尝试这一个:
def func(x):
x = x.sort_values(by='201723',ascending=False)[:5]
return x.loc[:, 'ld_fwv':]
bcom_hang_tbl.reset_index().groupby(['h_platformid', 'model']).apply(func).loc[:, 'ld_fwv':]
仍然没有工作:[![在这里输入的形象描述] [4] [4]
我怎么能做到这一点?
@MaxU,对不起,我做了一个mistake.I'v改变了我的小样本数据,以这样的:
index = pd.MultiIndex.from_arrays([['X', 'X', 'X', 'Y', 'Y','Y'], [1, 3, 5, 1, 3, 5]], names=['M1', 'M2'])
df = pd.DataFrame(np.arange(30).reshape(6,5), columns=list('ABCDE'), index=index)
df.groupby('M1').apply(lambda x: x.nlargest(2, 'A'))
由于在大表例如,索引M1被复制。
感谢您的回答。但建议的方法重复h_platformid和模型索引。 – Royalblue
@Royalblue,你能提供一个文本形式的样本数据集吗? – MaxU
我编辑了我的帖子,请看看。 – Royalblue