如何检查是否存在';在python中设置重复的键行值,并选择在python中具有最大数值列值的行

如何检查是否存在';在python中设置重复的键行值,并选择在python中具有最大数值列值的行,python,python-3.x,dataframe,duplicates,data-processing,Python,Python 3.x,Dataframe,Duplicates,Data Processing,我有以下数据集: 我需要删除具有重复键值的行,并在具有最大年龄的数据帧中只保留单行值 以下是所需的输出: 我希望问题陈述是明确的。答案取决于您对数据使用的框架 如果使用列表列表: new_list = [] keys = set() for row in old_list: key= row[0] if key in keys: # Allow no duplicates in set continue new_list.append(row) 例如

我有以下数据集:

我需要删除具有重复键值的行,并在具有最大年龄的数据帧中只保留单行值

以下是所需的输出:


我希望问题陈述是明确的。

答案取决于您对数据使用的框架

如果使用列表列表:

new_list = []
keys = set()
for row in old_list:
    key= row[0]
    if key in keys: # Allow no duplicates in set
        continue
    new_list.append(row)
例如,如果使用熊猫:

import pandas as pd
data = {
    'Key': ['AnaSay', 'Noolla', 'SamHus', 'SamHus', 'SamHus', 'SamHus', 'EliFer'],
    'Name': ['Ana', 'Noo', 'Sam', 'Sam', 'Sam', 'Sam', 'Eli'],
    'Sir Name': ['Say', 'Ila', 'Hus', 'Hus', 'Hus', 'Hus', 'Fer'],
    'Age': [22, 25, 28, 30, 21, 20, 33],
    'Index': [1, 2, 5, 10, 12, 6, 2],
    'Max': [1, 2, 5, 10, 12, 6, 2],
    'T/F(Index==Max)': ['TRUE', 'TRUE', 'TRUE', 'TRUE', 'TRUE', 'TRUE', 'TRUE']
}
df = pd.DataFrame(data)
df = df.sort_values(by=['Age']) # Sort dataframe by age
print(df)
print()
df = df.drop_duplicates(subset='Key', keep='last') # Save maximum age
print(df)

答案取决于用于数据的框架

如果使用列表列表:

new_list = []
keys = set()
for row in old_list:
    key= row[0]
    if key in keys: # Allow no duplicates in set
        continue
    new_list.append(row)
例如,如果使用熊猫:

import pandas as pd
data = {
    'Key': ['AnaSay', 'Noolla', 'SamHus', 'SamHus', 'SamHus', 'SamHus', 'EliFer'],
    'Name': ['Ana', 'Noo', 'Sam', 'Sam', 'Sam', 'Sam', 'Eli'],
    'Sir Name': ['Say', 'Ila', 'Hus', 'Hus', 'Hus', 'Hus', 'Fer'],
    'Age': [22, 25, 28, 30, 21, 20, 33],
    'Index': [1, 2, 5, 10, 12, 6, 2],
    'Max': [1, 2, 5, 10, 12, 6, 2],
    'T/F(Index==Max)': ['TRUE', 'TRUE', 'TRUE', 'TRUE', 'TRUE', 'TRUE', 'TRUE']
}
df = pd.DataFrame(data)
df = df.sort_values(by=['Age']) # Sort dataframe by age
print(df)
print()
df = df.drop_duplicates(subset='Key', keep='last') # Save maximum age
print(df)

pandas
中,您可以执行以下操作,其优点是您可以保留其他条目,以防年龄段出现平局:

import pandas as pd

df = pd.DataFrame([{"key": 1, "name": "a", "age": 20},
                   {"key": 1, "name": "a", "age": 21},
                   {"key": 2, "name": "b", "age": 20}])


df.merge(df.groupby("key").age.max(), 
         left_on=("key", "age"), 
         right_on=("key", "age"))
输出:

    key     name    age
0   1   a   21
1   2   b   20

pandas
中,您可以执行以下操作,其优点是您可以保留其他条目,以防年龄段出现平局:

import pandas as pd

df = pd.DataFrame([{"key": 1, "name": "a", "age": 20},
                   {"key": 1, "name": "a", "age": 21},
                   {"key": 2, "name": "b", "age": 20}])


df.merge(df.groupby("key").age.max(), 
         left_on=("key", "age"), 
         right_on=("key", "age"))
输出:

    key     name    age
0   1   a   21
1   2   b   20


请将您的数据直接发布到您的帖子中,而不是使用图像以便于复制;)。好的@Chris我会记住这件事的请直接把你的数据发布到你的帖子中,而不是使用图像来更容易地复制;)。好的@Chris我会记住这件事的@erikxiii我没有得到这个@erikxiii解释一下表是如何表示/创建的,然后我可以编辑答案来帮助你。keep='first'会有什么帮助?这意味着第一次出现的内容被删除了。默认值为“first”,因此不需要。如果您希望最后一个条目有效,您可以改为输入“last”。我不想要first或last我想要maxI没有得到这个@erikxiii解释如何表示/创建表,然后我可以编辑答案来帮助您。keep='first'有何帮助?这意味着第一个出现的条目已被删除。默认值为“first”,因此不需要。如果希望最后一个条目有效,可以改为输入“last”。我不想要first或last我想要最大值我尝试了这个pd.merge(df.groupby(“key”).age.max(),left_on=(“key”,“age”),right_on=(“key”,“age”))得到以下错误:merge()缺少1个必需的位置参数:“right”它是
df.merge
而不是
pd.merge
。如果使用大写大小写的列,请将列名调整为大写键(例如,
“key”
)。不工作显示以下值错误:无法将DataFrame与pandas 1.0.5上works类型的实例合并。如果失败,您也可以尝试
df.groupby(“key”).age.max().reset_index()
系列
转换回
数据帧
。我尝试了这个pd.merge(df.groupby(“key”).age.max(),left_on=(“key”,“age”),right_on=(“key”,“age”))得到以下错误:merge()缺少1个必需的位置参数:“right”它是
df.merge
而不是
pd.merge
。如果使用大写大小写的列,请将列名调整为大写键(例如,
“key”
)。不工作显示以下值错误:无法将DataFrame与pandas 1.0.5上works类型的实例合并。如果失败,您也可以尝试
df.groupby(“key”).age.max().reset_index()
系列
转换回
数据帧。