删除布尔列 = False 的重复项
Drop the duplicate where boolean column = False
在下面的示例中,我一直在尝试删除 == false 的重复项。我的意思是当 id 和 year 匹配超过 1 行时 (subset =[id, year])
df = pd.DataFrame({'id': ['1', '1', '1', '2', '2', '3', '4', '4'],
'Year': [2000, 2000, 2003, 2004, 2004, 2002, 2001, 2003], 'Boolean':['false', 'true', 'true', 'true', 'false', 'true', 'true', 'true']})
print(df)
# Output
id Year Boolean
0 1 2000 false
1 1 2000 true
2 1 2003 true
3 2 2004 true
4 2 2004 false
5 3 2002 true
6 4 2001 true
7 4 2003 true
# Attempted code
df2 = df.loc[df['Year'].eq('false').groupby([df.id]).idxmax()]
print(df2)
id Year Boolean
0 1 2000 false
3 2 2004 true
5 3 2002 true
6 4 2001 true
此代码不正确,因为我试图在存在重复时保留 Boolean == false 观察结果。它还删除了其他不重复的观察结果。不确定为此使用复制功能是否更容易。
"我一直在尝试删除 == false 的重复项。我的意思是当 id 和年份匹配超过 1 行时 (subset =[id, year])" -> 所以你需要按 ID 和 Year 分组(并使用正确的列作为布尔值源):
df.loc[df['Boolean'].eq('false').groupby([df['id'], df['Year']]).idxmax()]
输出:
id Year Boolean
0 1 2000 false
2 1 2003 true
4 2 2004 false
5 3 2002 true
6 4 2001 true
7 4 2003 true
布尔值
请注意,使用真正的布尔值会更好(更快、内存更少、语法更短……)
# convert to booleans
df['Boolean'] = df['Boolean'].eq('true')
df.loc[df.groupby(['id', 'Year'])['Boolean'].idxmin()]
id Year Boolean
0 1 2000 False
2 1 2003 True
4 2 2004 False
5 3 2002 True
6 4 2001 True
7 4 2003 True
在下面的示例中,我一直在尝试删除 == false 的重复项。我的意思是当 id 和 year 匹配超过 1 行时 (subset =[id, year])
df = pd.DataFrame({'id': ['1', '1', '1', '2', '2', '3', '4', '4'],
'Year': [2000, 2000, 2003, 2004, 2004, 2002, 2001, 2003], 'Boolean':['false', 'true', 'true', 'true', 'false', 'true', 'true', 'true']})
print(df)
# Output
id Year Boolean
0 1 2000 false
1 1 2000 true
2 1 2003 true
3 2 2004 true
4 2 2004 false
5 3 2002 true
6 4 2001 true
7 4 2003 true
# Attempted code
df2 = df.loc[df['Year'].eq('false').groupby([df.id]).idxmax()]
print(df2)
id Year Boolean
0 1 2000 false
3 2 2004 true
5 3 2002 true
6 4 2001 true
此代码不正确,因为我试图在存在重复时保留 Boolean == false 观察结果。它还删除了其他不重复的观察结果。不确定为此使用复制功能是否更容易。
"我一直在尝试删除 == false 的重复项。我的意思是当 id 和年份匹配超过 1 行时 (subset =[id, year])" -> 所以你需要按 ID 和 Year 分组(并使用正确的列作为布尔值源):
df.loc[df['Boolean'].eq('false').groupby([df['id'], df['Year']]).idxmax()]
输出:
id Year Boolean
0 1 2000 false
2 1 2003 true
4 2 2004 false
5 3 2002 true
6 4 2001 true
7 4 2003 true
布尔值
请注意,使用真正的布尔值会更好(更快、内存更少、语法更短……)
# convert to booleans
df['Boolean'] = df['Boolean'].eq('true')
df.loc[df.groupby(['id', 'Year'])['Boolean'].idxmin()]
id Year Boolean
0 1 2000 False
2 1 2003 True
4 2 2004 False
5 3 2002 True
6 4 2001 True
7 4 2003 True