#python #pandas #dataframe #duplicates
#python #pandas #фрейм данных #дубликаты
Вопрос:
У меня есть df
такой:
col1 col2 col3 col4
0 a 1 jake
1 b 1 li
2 c 2 bob corn
3 d 2 pat
4 e 2 angie
5 f 1 jose pepper
6 g 3 juan
Что я должен сделать, так это обновить отсутствующее значение col4 для строк, где дублируется col2, и в любом из этих дубликатов существует значение col4.
Таким образом, результат будет выглядеть следующим образом:
col1 col2 col3 col4
0 a 1 jake pepper
1 b 1 li pepper
2 c 2 bob corn
3 d 2 pat corn
4 e 2 angie corn
5 f 1 jose pepper
6 g 3 juan
Есть мысли?
Ответ №1:
Я бы сделал fillna
с groupby().transform
:
df['col4'] = df['col4'].fillna(df.groupby('col2')['col4'].transform('first'))
Вывод:
col1 col2 col3 col4
0 a 1 jake pepper
1 b 1 li pepper
2 c 2 bob corn
3 d 2 pat corn
4 e 2 angie corn
5 f 1 jose pepper
6 g 3 juan NaN
Ответ №2:
попробуйте это,
dic = df[df["col4"].notnull()].set_index("col2")["col4"].to_dict()
df.loc[df["col4"].isnull(), "col4"]=df["col2"]
df["col4"] = df["col4"].replace(dic)
O/P:
col1 col2 col3 col4
0 a 1 jake pepper
1 b 1 li pepper
2 c 2 bob corn
3 d 2 pat corn
4 e 2 angie corn
5 f 1 jose pepper
6 g 3 juan 3
вы могли бы удалить 3
, найдя str.isdigit()
Ответ №3:
Это может быть достигнуто следующим образом :
dictionary = df[~(df.col4=='')].set_index("col2")["col4"].to_dict()
df.col4 = df.col2.apply(lambda x : dictionary[x] if x in dictionary.keys() else '')
Вывод:
| col1 | col2 | col3 | col4 |
|:-------|-------:|:-------|:-------|
| a | 1 | jake | pepper |
| b | 1 | li | pepper |
| c | 2 | bob | corn |
| d | 2 | pat | corn |
| e | 2 | angie | corn |
| f | 1 | jose | pepper |
| g | 3 | juan | |