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