DF:
d = pd.DataFrame({'tic': ['B', 'C', 'A', 'A', 'C', 'A', 'A', 'B','B', 'C', 'A', 'A'],
'em': [10, 5, np.nan, 5, np.nan, np.nan, 12, np.nan, 12, 7,
5, np.nan],
'C':[1,4,np.nan,2, 7, np.nan, 7, 9,7, np.nan, 7, 9]}
)
d.set_index(['tic'], inplace=True, drop=False)
d.sort_index(level=0, inplace=True)
如果d['em'][-3:]
确实为我提供了em
列的最后3个元素,那么为什么d['em'][-3:].groupby(level=0)
不会让我按组进行最后3个?
另外,为什么d['em'][-3:].groupby('tic')
会给出:
KeyError: 'tic'
?
我认为level=0
和'tic'
都可以在这种情况下使用,基于:
In[40]: d.index.names
Out[40]: FrozenList(['tic', 'None'])
答案 0 :(得分:1)
我认为您需要groupby
功能GroupBy.tail
,最后需要DataFrame
reset_index
和rename
列level_1
:
print (d.groupby(level='tic')['em'].tail(3))
tic
A 1971-09-30 12.0
1972-09-30 5.0
1972-12-31 NaN
B 1970-03-31 10.0
1971-12-31 NaN
1972-03-31 12.0
C 1970-06-30 5.0
1971-03-31 NaN
1972-06-30 7.0
Name: em, dtype: float64
d1 = d.groupby(level='tic')['em'].tail(3).reset_index().rename(columns={'level_1':'date'})
print (d1)
tic date em
0 A 1971-09-30 12.0
1 A 1972-09-30 5.0
2 A 1972-12-31 NaN
3 B 1970-03-31 10.0
4 B 1971-12-31 NaN
5 B 1972-03-31 12.0
6 C 1970-06-30 5.0
7 C 1971-03-31 NaN
8 C 1972-06-30 7.0