pandas groupby,仅保留第一次出现的行

时间:2019-04-12 14:24:40

标签: python pandas

对于我希望实现的目标而言,这是一个缓慢的解决方案。问题是性能。如果没有用户定义的功能,还有没有更多的“泛型”方式来实现这一目标?目标是仅保留每个组中出现的第一个时间戳的所有行。

def get_first_id_time(df):
    first_time = df['datetime'][0]
    df = df.loc[df['datetime']==first_time]

    return df

data = data.groupby('id').apply(get_first_id_time)

编辑:注意,对于每个组,有很多行的datetime = first_time。

1 个答案:

答案 0 :(得分:3)

您能否只获取99日期时间和DataFrame1 | id | n | m | c | |--------|------|---|---| | 577140 | bla1 | 0 | 0 | | 577140 | bla2 | 0 | 0 | | 577140 | bla3 | 0 | 0 | | 577140 | bla4 | 1 | 0 | | 577140 | bla5 | 0 | 1 | | 577141 | bla6 | 0 | 0 | | 577141 | bla7 | 0 | 0 | | 577141 | bla8 | 1 | 0 | DataFrame2 | id | d | |--------|---| | 577140 | 1 | | 577141 | 0 | DataFrame3 (currently) | id | |--------| | 577140 | | 577141 | DataFrame3 (needed) | id | x | y | |--------|------|---| | 577140 | bla4 | 1 | | 577141 | bla8 | 0 |

min

编辑:

由于有许多行具有相同的merge,因此min_datetime = data.groupby('id')['datetime'].min().reset_index() data = data.merge(min_datetime, how='inner', on='id') first_datetime上只有merge