Заменить значения столбца после удаления дубликатов - PullRequest
0 голосов
/ 29 января 2019

У меня есть фрейм данных:

id    time
Uk6   year
36h   year
Uk6   two-year
rf5   month
gg7   year
rf5   half-year

Мне нужно удалить дублирование на основе столбца «id» и заменить значение времени «unknown» для дублированной строки.Результаты должны быть:

id      time
Uk6    unknown
36h    year
rf5    unknown
gg7    year

Я попробовал предложить ответы на предыдущие вопросы ( like_this ), но они не работают.

Ответы [ 3 ]

0 голосов
/ 29 января 2019

Вы можете сначала получить индексы дубликатов, затем заменить соответствующие значения time на unknown и, наконец, отбросить дубликаты:

import pandas as pd

df = pd.DataFrame({'id': ["Uk6", "36h", "Uk6", "rf5", "gg7", "rf5"],
                   'time': ["year", "year", "two-year", "month", "year", "half-year"]})

mask = df.duplicated(subset= 'id', keep=False)
df['time'][mask] = "unknown"
df = df.drop_duplicates('id')
0 голосов
/ 29 января 2019

Используйте loc для замены теста неизвестными и отбросьте дубликаты,

df.loc[df.id.duplicated(keep = False), 'time'] = 'unknown'
df = df.drop_duplicates()

    id  time
0   Uk6 unknown
1   36h year
3   rf5 unknown
4   gg7 year
0 голосов
/ 29 января 2019

Попробуйте следующее

# create the dataframe
df = pd.DataFrame(data={'id': ['Uk6', '36h', 'Uk6', 'rf5', 'gg7', 'rf5'],
                        'time': ['year', 'year', 'two-year', 'month', 'year', 'half-year']})

# get duplicated id's
dups_id = df[df.duplicated(subset='id')]['id']

# remove rows from dataframe with id that has duplicated rows
df = df.drop_duplicates(subset='id')

# replace values of 'time' for those rows with duplicated id's with 'unknown'
df.loc[:,'time'] = df['time'].where(~df['id'].isin(dups_id), other='unknown')

Вывод

    id     time
0  Uk6  unknown
1  36h     year
3  rf5  unknown
4  gg7     year
...