假设我有以下Multiindex数据框架,命名为data:
Multiindex | Val
-----------------------------------
'A' | 'xxx' | 2016-10-24 | 1
| 2016-10-25 | 2
| 2016-10-26 | 0.5
| 2016-10-26 | 0.5
-----------------------------------
'B' | 'xxx' | 2016-10-24 | 0
| 2016-10-25 | -2
| 2016-10-26 | -4
| 2016-10-26 | 20
| 2016-10-27 | 3
| 2016-10-28 | 5
我想保留多索引级别0中每个组的最后20%的数据(即'A'和'B'的最后20%)。我知道如何在第0层获得每个索引所需的元素数量:
numElem = (data.groupby(level=0).size()*0.2).astype(np.int)
但我不确定如何提取这些数据。
使用groupby().transform
与cumcount
和size
:
groups = data.groupby(level=0)
sizes = groups['Val'].transform('size')
rows = groups['Val'].cumcount()
data[rows >= 0.8 * sizes]