我正在开发一个有关数据分析的学生项目,我想在数据框中找到所有重复项,但是更改了一个特定的单元格,例如
ID | 名称 | 姓 | 工作 | 工资 |
---|---|---|---|---|
1个 | 约翰 | 黑色 | 艺术家 | 1200 |
2 | 亚当 | 史密斯 | 艺术家 | 1400 |
3 | 约翰 | 黑色 | 艺术家 | 1900年 |
4 | 约翰 | 黑色 | 司机 | 1200 |
5 | 亚当 | 史密斯 | 艺术家 | 1400 |
6 | 亚当 | 黑色 | 司机 | 1200 |
现在我想接收具有相同姓名,姓氏和工作但薪水不同或相同的人。它看起来应该像这样:
ID | 名称 | 姓 | 工作 | 工资 |
---|---|---|---|---|
1个 | 约翰 | 黑色 | 艺术家 | 1200 |
3 | 约翰 | 黑色 | 艺术家 | 1900年 |
2 | 亚当 | 史密斯 | 艺术家 | 1400 |
5 | 亚当 | 史密斯 | 艺术家 | 1400 |
(这只是简单的数据,我有很多很多的行和列)。我怎么能得到这个?我试过这样的代码:
names=df['Name'].value_counts()
surnames=df['Surname'].value_counts()
jobs=df['Job'].value_counts()
wages=df['Wage'].value_counts()
for i in names:
for j in surnames:
for k in jobs:
if (df['Name'] == i and df['Surname'] == j and df['Job'] == k):
print ("something")
但我仍然有一个错误:
f"The truth value of a {type(self).__name__} is ambiguous. "
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
我也尝试过使用lambda表达式:
for i in names:
for j in surnames:
for k in jobs:
persons= df.apply(lambda x: print (x) if x['Name'] == i and x['Surname'] == j and x['Job'] == l else False, axis=1)
print(persons)
但是我得到了一对ID和值true或false。我该如何修理?或者我该怎么办?谢谢你的建议
要获取所有重复记录和非重复记录,可以Series.duplicated
与parameter一起使用keep=False
。这将导致boolean index
。然后,您可以使用结果选择所需的行。
您的问题的单行答案是:
df[(df[['Name','Surname','Job']].duplicated(keep=False))]
输出为:
Id Name Surname Job Wage
0 1 John Black Artist 1200
1 2 Adam Smith Artist 1400
2 3 John Black Artist 1900
4 5 Adam Smith Artist 1400
运作方式如下:
对于如下所示的数据框:
>>> df
Id Name Surname Job Wage
0 1 John Black Artist 1200
1 2 Adam Smith Artist 1400
2 3 John Black Artist 1900
3 4 John Black Driver 1200
4 5 Adam Smith Artist 1400
5 6 Adam Black Driver 1200
搜索姓名,姓氏和工作的重复项将导致:
>>> df[['Name','Surname','Job']].duplicated(keep=False)
0 True
1 True
2 True
3 False
4 True
5 False
dtype: bool
使用此布尔索引,您可以获取所有为True和False的记录。
要获取所有重复项,可以使用以下命令:
>>> df[(df[['Name','Surname','Job']].duplicated(keep=False))]
Id Name Surname Job Wage
0 1 John Black Artist 1200
1 2 Adam Smith Artist 1400
2 3 John Black Artist 1900
4 5 Adam Smith Artist 1400
要获取所有非重复项,可以提供此命令。该~
会否定,给你不符合此条件的所有值。
>>> df[~(df[['Name','Surname','Job']].duplicated(keep=False))]
Id Name Surname Job Wage
3 4 John Black Driver 1200
5 6 Adam Black Driver 1200
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句