Замените заданные c строковые дубликаты ячеек в выбранных столбцах без удаления строк - PullRequest
2 голосов
/ 06 марта 2020

Как я могу заменить указанные c строковые дубликаты ячеек в выбранных столбцах без удаления строк (желательно без циклического перемещения по строкам)?

По сути, я хочу сохранить первое значение и заменить оставшиеся дублирует подряд с NAN.

Например:

df_example = pd.DataFrame({'A':['a' , 'b', 'c'], 'B':['a', 'f', 'c'],'C':[1,2,3]})
df_example.head() 

Оригинал:

    A   B   C
0   a   a   1
1   b   f   2
2   c   c   3

Ожидаемый результат:

    A   B   C
0   a   nan 1
1   b   f   2
2   c   nan 3

Бит Более сложный пример выглядит следующим образом:

Оригинал:

    A   B   C D 
0   a   1   a 1
1   b   2   f 5
2   c   3   c 3

Ожидаемый результат:

    A   B   C D 
0   a   1   nan nan
1   b   2   f 5
2   c   3   nan nan

1 Ответ

1 голос
/ 06 марта 2020

Использовать DataFrame.mask с Series.duplicated для строк в DataFrame.apply:

df_example = df_example.mask(df_example.apply(lambda x: x.duplicated(), axis=1))
print (df_example)
   A    B  C
0  a  NaN  1
1  b    f  2
2  c  NaN  3

С новыми данными:

df_example = df_example.mask(df_example.apply(lambda x: x.duplicated(), axis=1))
print (df_example)
   A  B    C    D
0  a  1  NaN  NaN
1  b  2    f  5.0
2  c  3  NaN  NaN
...