【问题标题】:drop first and last row from within each group从每个组中删除第一行和最后一行
【发布时间】:2016-12-12 09:21:44
【问题描述】:

这是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 行,因此应删除所有行。

【问题讨论】:

    标签: python pandas group-by


    【解决方案1】:

    我会在另一个问题上应用类似的技术:

    def first_last(df):
        return df.ix[1:-1]
    
    df.groupby(level=0, group_keys=False).apply(first_last)
    

    【讨论】:

      【解决方案2】:

      注意:在 pandas 0.20.0 及更高版本中,ix 为 deprecated,鼓励使用 iloc。

      所以df.ix[1:-1] 应该替换为df.iloc[1:-1]

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-05-24
        • 2019-03-20
        • 1970-01-01
        • 2014-09-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多