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