Принимая все повторяющиеся значения в столбце как одно значение в пандах - PullRequest
0 голосов
/ 26 августа 2018

Мой текущий фрейм данных:

     Name   term    Grade
  0    A      1       35
  1    A      2       40
  2    B      1       50
  3    B      2       45

Я хочу получить фрейм данных как:

     Name   term    Grade
  0   A      1        35
             2        40
  1   B      1        50
             2        45

Можно ли получить ожидаемый результат? Если да, как я могусделать это?

1 Ответ

0 голосов
/ 26 августа 2018

Используйте duplicated для логической маски с numpy.where:

mask = df['Name'].duplicated()
#more general
#mask = df['Name'].ne(df['Name'].shift()).cumsum().duplicated()
df['Name'] = np.where(mask, '', df['Name'])
print (df)
  Name  term  Grade
0    A     1     35
1          2     40
2    B     1     50
3          2     45

Разница между масками возможна в измененных DataFrame:

print (df)
  Name  term  Grade
0    A     1     35
1    A     2     40
2    B     1     50
3    B     2     45
4    A     4     43
5    A     3     46

Если несколько одинаковых последовательных групп, например 2 A, нуждаются в общем решении:

mask = df['Name'].ne(df['Name'].shift()).cumsum().duplicated()
df['Name'] = np.where(mask, '', df['Name'])
print (df)
  Name  term  Grade
0    A     1     35
1          2     40
2    B     1     50
3          2     45
4    A     4     43
5          3     46

mask = df['Name'].duplicated()
df['Name'] = np.where(mask, '', df['Name'])
print (df)
  Name  term  Grade
0    A     1     35
1          2     40
2    B     1     50
3          2     45
4          4     43
5          3     46
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...