如何检查是否存在';在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()
将系列
转换回数据帧。