Я работаю с df:
df.shape[0]
82208
И я хочу индексировать дубликаты на основе имени, фамилии и адреса электронной почты:
indx = (df.dropna(subset=['firstname', 'lastname', 'email'])
.duplicated(subset=['firstname', 'lastname', 'email'], keep=False))
indx
0 True
1 True
2 False
3 False
4 True
5 True
indx.shape[0]
73797
Я не могу использовать это противоригинальный df, использующий df[indx]
, так как они не совпадают по размеру, как вы можете видеть из .shape[0]
.Я тоже пытался использовать indx.index
, но получаю:
df[indx.indx]
KeyError: "None of [Int64Index([ 0, 1, 2, 3, 4, 5, 6, 7, 8,\n 9,\n ...\n 82198, 82199, 82200, 82201, 82202, 82203, 82204, 82205, 82206,\n 82207],\n dtype='int64', length=73797)] are in the [columns]"
Я знаю, что это что-то очень простое, я просто не могу понять это.Кажется, indx
, который я генерирую, сбрасывает его индекс.То, что я пытаюсь получить, это индекс того, где есть дуплексы в первом df.Я предполагаю, что моя проблема связана с dropna()
при создании индекса.
edit: было предложено проверить дубликат поста, но это не отвечает на мой вопрос. Дубликат - это просто базовая индексация.
Моя проблема заключается в том, что при создании нового индекса / логического ряда 'indx'
исходные индексы df
теряются.Поэтому его нельзя использовать для индексации df
.
edit: другое решение для этого - переиндексирование, чтобы оно соответствовало размеру df.
df = pd.DataFrame({'firstname':['stack','Bar Bar',np.nan,'Bar Bar','john','mary','jim'],
'lastname':['jim','Bar','Foo Bar','Bar','con','sullivan','Ryan'],
'email':[np.nan,'Bar','Foo Bar','Bar','john@com','mary@com','Jim@com']})
print(df)
firstname lastname email
0 stack jim NaN
1 Bar Bar Bar Bar
2 NaN Foo Bar Foo Bar
3 Bar Bar Bar Bar
4 john con john@com
5 mary sullivan mary@com
6 jim Ryan Jim@com
indx = (df.dropna(subset=['firstname', 'lastname', 'email'])
.duplicated(subset=['firstname', 'lastname', 'email'], keep=False))
indx = indx.reindex(df.index, fill_value=False)
df[indx ]
firstname lastname email
1 Bar Bar Bar Bar
3 Bar Bar Bar Bar