打印更改一个值的重复项

阿尔金

我正在开发一个有关数据分析的学生项目,我想在数据框中找到所有重复项,但是更改了一个特定的单元格,例如

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。我该如何修理?或者我该怎么办?谢谢你的建议

乔·费尔兹(Joe Ferndz)

要获取所有重复记录和非重复记录,可以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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

仅打印重复项中的一个值

如果一个(或多个)值为零,则不打印重复项

将重复项的值更改为一个

根据SQL中的一个值返回重复项

基于一个值删除重复项

R:从向量中提取非重复值(对于重复项不保留一个值)

AWK 从两列中识别重复项,但打印第一个实例

删除多维数组中只有一个值的重复项,而在PHP中是重复项

比较两个文件以进行匹配,如果找到重复的匹配项,则仅打印一个

Google 表格:包含重复值的列表。从最早日期的重复项中仅获取一个值

基于一个值的总和,而不考虑另一个列中的重复项-Access或Excel

根据另一个列值在Excel中删除重复项

使用.GroupBy删除列表重复项,并保留第一个列表中的值

SQL不显示重复项/仅显示最后一个值

使用 Excel 表格时,显示除第一个值之外的重复项

按值从数组中删除一个项目,但保留该项目的重复项

熊猫:检查重复项行中的至少一个值是否为1

SQL在一列中计算重复项,但重复条件不仅是一个固定值

根据另一个文件中的值打印重复的字符串行

从一组重复项中查找一个值以分配给唯一值

如果条件满足,则重复数据帧的行,并更改一个值的值

在另一列中识别具有不同值的一个值的重复项

Excel:如何在一个列中收集与另一列中的重复项关联的唯一值?

VBA:多次重复一个值

打印相同的标签但在每个标签中更改一个值

基于从另一个表中选择的列更改的重复值

重复二维列表中的元素,同时更改一个值?

使用基于另一个具有唯一值的重复项填充数据框

使用REGEX_EXTRACT从重复项中提取一个值,但不提取另一个值