Как я могу отбросить повторяющиеся значения в столбце, сохраняя данные для его строк? - PullRequest
0 голосов
/ 03 февраля 2020

У меня есть фрейм данных, в котором есть столбец повторяющихся значений / индексов, и я хочу сгруппировать его по столбцу «Имя», но без агрегирования. Я посмотрел на функцию Dataframe.groupby(), но из того, что я искал, вы вынуждены выполнить агрегацию. Я также попытался Dataframe.set_index('Name'), а затем сделал Dataframe.sort_index(inplace = True), но по какой-то причине он возвращает Nonetype Я чувствую, что это что-то очевидное, но я не могу понять это.

Это мой датафрейм сейчас:

Name Data1 Data2
A    .1    1.1
A    .2    1.2
A    .3    1.3
B    .6    1.6
B    .7    1.7
B    .8    1.8
C    1.0   2.0
C    1.1   2.1
C    1.2   2.2

Вот что я хочу:

Name Data1 Data2
A    .1    1.1
     .2    1.2
     .3    1.3
B    .6    1.6
     .7    1.7
     .8    1.8
C    1.0   2.0
     1.1   2.1
     1.2   2.2

1 Ответ

2 голосов
/ 03 февраля 2020

Если хотите заменить дублированные значения на пустые строки, используйте Series.duplicated на Series.mask:

df['Name'] = df['Name'].mask(df['Name'].duplicated(), '')
print (df)
  Name  Data1  Data2
0    A    0.1    1.1
1         0.2    1.2
2         0.3    1.3
3    B    0.6    1.6
4         0.7    1.7
5         0.8    1.8
6    C    1.0    2.0
7         1.1    2.1
8         1.2    2.2

В MultiIndex для первого просмотра также рабочие, но НЕ, значения только в виде по умолчанию НЕ отображаются на первом (ых) уровне (ах) при дублировании:

df1 = df.set_index(['Name','Data1'])
print (df1)
            Data2
Name Data1       
A    0.1      1.1
     0.2      1.2
     0.3      1.3
B    0.6      1.6
     0.7      1.7
     0.8      1.8
C    1.0      2.0
     1.1      2.1
     1.2      2.2

Проверка документов, в [21]: , не пропущено данные, только перемещенные в MultiIndex:

with pd.option_context('display.multi_sparse', False):
    print (df1)

            Data2
Name Data1       
A    0.1      1.1
A    0.2      1.2
A    0.3      1.3
B    0.6      1.6
B    0.7      1.7
B    0.8      1.8
C    1.0      2.0
C    1.1      2.1
C    1.2      2.2

Или, если преобразовать значения MultiIndex в список:

print (df1.index.tolist())
[('A', 0.1), ('A', 0.2), ('A', 0.3), 
 ('B', 0.6), ('B', 0.7), ('B', 0.8), 
 ('C', 1.0), ('C', 1.1), ('C', 1.2)]
...