gpt4 book ai didi

python - 如何在删除 NA 的同时获取重复值的索引?结果索引小于原始数据帧

转载 作者:行者123 更新时间:2023-12-01 07:37:09 24 4
gpt4 key购买 nike

我正在与 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[indx] 将其用于原始 df,因为它们的大小不匹配,如您从 .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() 有关。

编辑:建议查看重复的帖子,但这并不能回答我的问题。重复的只是基本索引。

我的问题是,在生成新索引/ bool 系列'indx'时,原始df索引丢失了。所以它不能用于索引df

编辑:另一个解决方案是重新索引,使其与 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

最佳答案

不要删除 nan,然后创建 bool 掩码,而是添加到为 nan 返回 False 的 bool 掩码,以便保留所有索引,但为 nan 返回 false。使用 df.isna()df.any() 对于 axis=1 我们可以使用以下内容:

cols=['firstname', 'lastname', 'email']
index=(~df[cols].isna().any(1)&df.duplicated(subset=cols, keep=False))

关于python - 如何在删除 NA 的同时获取重复值的索引?结果索引小于原始数据帧,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56937088/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com