提问人:Angie 提问时间:2/18/2023 更新时间:2/18/2023 访问量:38
我按 id 对包含相同值的两个数据帧进行了排序,但发现它们不相等
I sorted two dataframes by id that contain the same values but am getting that they are not equal
问:
我有两个数据帧:
DF1型
ID Name
15 Max
7 Stacy
3 Frank
2 Joe
DF2型
ID Name
2 Abigail
3 Josh
15 Jake
7 Brian
我通过做对它们进行排序
df1 = df1.sort_values(by=['ID'])
df2 = df2.sort_values(by=['ID'])
获取
DF1型
ID Name
2 Joe
3 Frank
7 Stacy
15 Max
DF2型
ID Name
2 Abigail
3 Josh
7 Brian
15 Jake
但是,当我通过以下方式检查两个数据帧中的“ID”列是否相同时
print(df1['ID'].equals(df2['ID']))
它返回 False,为什么会这样?有没有另一种方法可以用来返回两列相等?
答:
0赞
ifly6
2/18/2023
#1
它们仍在原始索引上进行比较:
import io
df1 = pd.read_csv(io.StringIO('''ID Name
15 Max
7 Stacy
3 Frank
2 Joe''', sep='\s+'))
df2 = pd.read_csv(io.StringIO('''ID Name
2 Abigail
3 Josh
15 Jake
7 Brian'''), sep='\s+')
df1 = df1.sort_values(by=['ID'])
df2 = df2.sort_values(by=['ID'])
基本上发生的事情是,它正在检查以下数据帧中的 和 是否相等;他们不是。ID
ID_other
>>> df1.join(df2, rsuffix='_other')
ID Name ID_other Name_other
3 2 Joe 7 Brian
2 3 Frank 15 Jake
1 7 Stacy 3 Josh
0 15 Max 2 Abigail
如果要在不考虑索引的情况下检查相等性,请考虑:
df1['ID'].values == df2['ID'].values
或者重置两边的索引,然后使用 .eq
0赞
Serge de Gosson de Varennes
2/18/2023
#2
帧很可能具有不同的索引。您应该执行以下操作:
df1 = df1.sort_values(by=['ID']).reset_index(drop=True)
df2 = df2.sort_values(by=['ID']).reset_index(drop=True)
print(df1['ID'].equals(df2['ID'])) # this returns True
另类:
import pandas as pd
df1 = pd.DataFrame({'ID': [15, 7, 3, 2], 'Name': ['Max', 'Stacy', 'Frank', 'Joe']})
df2 = pd.DataFrame({'ID': [2, 3, 15, 7], 'Name': ['Abigail', 'Josh', 'Jake', 'Brian']})
df1 = df1.sort_values(by=['ID']).reset_index(drop=True)
df2 = df2.sort_values(by=['ID']).reset_index(drop=True)
print(df1['ID'].equals(df2['ID'])) # should return True
0赞
I'mahdi
2/18/2023
#3
你不需要排序。你可以使用 pandas。DataFrame.set_index
使用 pandas。DataFrame.eq
。
df1.set_index('ID').eq(df2.set_index('ID'))
例如,如果和喜欢:df1
df2
>>> print(df1)
# ID Name
# 0 15 Max
# 1 7 Stacy
# 2 3 Frank
# 3 2 Joe
>>> print(df2)
# ID Name
# 0 2 Abigail
# 1 3 Josh
# 2 15 Max
# 3 7 Brian
>>> df1.set_index('ID').eq(df2.set_index('ID'))
Name
ID
2 False
3 False
7 False
15 True
评论
print(df1['ID'] == df2['ID'])