这是get first and last values in a groupby
的后续问题如何删除每组中的第一行和最后一行?
我有df
df = pd.DataFrame(np.arange(20).reshape(10, -1),
[['a', 'a', 'a', 'a', 'b', 'b', 'b', 'c', 'c', 'd'],
['a', 'a', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']],
['X', 'Y'])
df
我故意让第二行与第一行具有相同的索引值。我无法控制索引的唯一性。
X Y
a a 0 1
a 2 3
c 4 5
d 6 7
b e 8 9
f 10 11
g 12 13
c h 14 15
i 16 17
d j 18 19
我想要这个
X Y
a b 2.0 3
c 4.0 5
b f 10.0 11
因为0级的两个组都等于' c'并且' d'如果少于3行,则应删除所有行。
答案 0 :(得分:3)
我将类似的技巧应用于我对其他问题的处理方式:
def first_last(df):
return df.ix[1:-1]
df.groupby(level=0, group_keys=False).apply(first_last)
答案 1 :(得分:1)
注意:在pandas版本0.20.0及更高版本中,ix为deprecated,而且鼓励使用iloc。
因此df.ix[1:-1]
应替换为df.iloc[1:-1]
。