我有一个大熊猫数据框,它有两列。一列是项目的唯一代码,第二列包含该项目的名称。
例如,假设“ID”具有动物的唯一代码,“名称”具有该动物的名称。
df = pd.DataFrame({'ID': ['AA','BB', 'CC', 'DD', 'EE'],
'Name': ['Ape', 'Bull', 'Chimp', 'Dog', 'Dog']})
ID Name
0 AA Ape
1 BB Bull
2 CC Chimp
3 DD Dog
4 EE Dog
当我运行下面的代码时,我会得到错误,因为 ID 列中的唯一项比名称列中的多一个
len(df['Code'].unique()) == len(df['Name'].unique())
我的问题是如何找出两个代码代表哪种动物。理想情况下,我希望最终得到一个具有以下内容的数据框:
ID Name
3 DD Dog
4 EE Dog
但只要我能识别出不止一个 ID 所代表的动物,我就会对获得所需结果的任何解决方案感到满意。
谢谢
编辑:
数据框包含重复的行,因此类似于实际问题的更现实的示例是如下所示的数据框:
ID Name
0 AA Ape
1 BB Bull
2 CC Chimp
3 DD Dog
4 EE Dog
5 CC Chimp
6 AA Ape
7 DD Dog
8 FF Frog
df = pd.DataFrame({'ID': ['AA','BB', 'CC', 'DD', 'EE', 'CC', 'AA', 'DD', 'FF'],
'Name': ['Ape', 'Bull', 'Chimp', 'Dog', 'Dog', 'Chimp', 'Ape', 'Dog', 'Frog']})
期望的输出仍然是查找哪个ID已与两个不同的动物名称匹配
ID Name
3 DD Dog
4 EE Dog
对于像第二个示例(包含重复行)这样的数据框,带有一个稍微增强的示例
import pandas as pd
df = pd.DataFrame({'ID': ['AA','BB', 'CC', 'DD', 'EE', 'CC', 'AA', 'DD', 'FF', 'AA'],
'Name': ['Ape', 'Bull', 'Chimp', 'Dog', 'Dog', 'Chimp', 'Ape', 'Dog', 'Frog','Bull']})
# ID Name
# 0 AA Ape
# 1 BB Bull
# 2 CC Chimp
# 3 DD Dog
# 4 EE Dog
# 5 CC Chimp
# 6 AA Ape
# 7 DD Dog
# 8 FF Frog
# 9 AA Bull
我们可以使用以下内容。对结果进行排序,以便更容易按Name识别ID。
df.groupby('Name').filter(lambda x: x['ID'].nunique() > 1).drop_duplicates(subset=['ID','Name']).sort_values('Name')
输出
ID Name
1 BB Bull
9 AA Bull
3 DD Dog
4 EE Dog
对于具有唯一行的数据框@ShubhamSharma 的答案要快得多。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句