我已经将头撞在墙上几个小时了,并且感谢我能得到的任何帮助。
我正在使用大型数据集(超过270,000行),并且我试图在两列中找到应该具有配对值的异常。
从下面输出的片段中 - 我正在查看Alcohol_Category_ID和Alcohol_Category_Name列。 ID列具有数字字符串值,该值应与“名称”列中的字符串描述符以1:1配对。 (例如," 1031100.0" ==" 100 PROOF VODKA"。
如您所见,两列都具有相同的非空值计数。但是,有72个唯一ID,只有71个唯一名称。我认为这意味着一个名称与两个不同的ID错误地关联。
County Alcohol_Category_ID Alcohol_Category_Name Vendor_Number \
count 269843 270288 270288 270920
unique 99 72 71 116
top Polk 1031080.0 VODKA 80 PROOF 260
freq 49092 35366 35366 46825
first NaN NaN NaN NaN
last NaN NaN NaN NaN
mean NaN NaN NaN NaN
std NaN NaN NaN NaN
min NaN NaN NaN NaN
25% NaN NaN NaN NaN
50% NaN NaN NaN NaN
75% NaN NaN NaN NaN
max NaN NaN NaN NaN
我的麻烦在于实际上隔离了这种重复发生的位置,这样我就可以用正确的值替换错误的ID。我有一条时间的狗。
我的数据框名为i_a。
我一直在尝试使用groupby和count语句检查这两列之间的值对,如下所示:
i_a.groupby(["Alcohol_Category_Name", "Alcohol_Category_ID"]).Alcohol_Category_ID.count()
但是,我不确定如何从那里减少它。并且有太多的配对使这很容易在视觉上做。
有人可以推荐一种方法来隔离与多个Alcohol_Category_ID相关联的Alcohol_Category_Name吗?
非常感谢你的考虑!
编辑:在考虑了德米特里的建议之后,我找到了解决方案,不断对重复进行配对,直到我磨练了感兴趣的价值,如下:#Finding all unique pairings of Category IDs and Names
subset = i_a.drop_duplicates(["Alcohol_Category_Name", "Alcohol_Category_ID"])
#Now, determine which of the category names appears more than once (thus paired with more than one ID)
subset[subset["Alcohol_Category_Name"].duplicated()]
非常感谢你的帮助。回想起来似乎很明显,但我无法理解我的生活。
答案 0 :(得分:1)
我认为此代码段符合您的需求:
> df = pd.DataFrame({'a':[1,2,3,1,2,3], 'b':[1,2,1,1,2,1]})
因此df.a
有3个唯一值映射到df.b
中的2个唯一身份。
> df.groupby('b')['a'].nunique()
b
1 2
2 1
这表明df.b = 1映射到a中的2个uniques(并且df.b = 2映射到只有1)。