Сохранять первую строку вхождения по идентификатору и первое вхождение при изменении значения в столбце - PullRequest
0 голосов
/ 27 мая 2020

В следующем примере df, как лучше всего сохранить:

  • Первая строка, когда Score появляется для каждого id
  • Затем первая строка когда значение изменяется на Score для каждого id и отбрасывает повторяющиеся строки до тех пор, пока оно не изменится

Пример df

      date      id   Score
0   2001-09-06  1       3
1   2001-09-07  1       3
2   2001-09-08  1       4
3   2001-09-09  2       6
4   2001-09-10  2       6
5   2001-09-11  1       4
6   2001-09-12  2       5
7   2001-09-13  2       5
8   2001-09-14  1       3

Желательно df

      date      id   Score
0   2001-09-06  1       3
1   2001-09-08  1       4
2   2001-09-09  2       6
3   2001-09-12  2       5
4   2001-09-14  1       3

Ответы [ 3 ]

3 голосов
/ 27 мая 2020

Используйте groupby с diff:

print (df[df.groupby("id")["Score"].diff()!=0])

         date  id  Score
0  2001-09-06   1      3
2  2001-09-08   1      4
3  2001-09-09   2      6
6  2001-09-12   2      5
8  2001-09-14   1      3

Первое появление всегда приводит к NaN, что! = 0.

0 голосов
/ 27 мая 2020

Согласно вашему логу c:

# shift Score within id
# shifted score at each group start is `NaN`
shifted_scores = df['Score'].groupby(df['id']).shift()

# change of Score within each id
# since first shifted score in each group is `NaN`
# mask is also True at first line of each group
mask = df['Score'].ne(shifted_scores)

# output
df[mask]

Вывод:

         date  id  Score
0  2001-09-06   1      3
2  2001-09-08   1      4
3  2001-09-09   2      6
6  2001-09-12   2      5
8  2001-09-14   1      3
0 голосов
/ 27 мая 2020
df.groupby(['id', 'score']).first()
...