比较 pandas 中数据框中的条目
Comparing entries in dataframes in pandas
我有2个相同的dataframes,我们可以以此为例
import pandas as pd
import numpy as np
data = {'name': ['Sheldon', 'Penny', 'Amy', 'Penny', 'Raj', 'Sheldon'],
'episodes': [42, 24, 31, 29, 37, 40],
'gender': ['male', 'female', 'female', 'female', 'male', 'male']}
data1 = {'name': ['Sheldon', 'Penny', 'Amy', 'Penny', 'Raj', 'Sheldon'],
'episodes': [12, 32, 31, 32, 37, 40],
'gender': ['male', 'female', 'female', 'female', 'male', 'male']}
df1 = pd.DataFrame(data1, columns = ['name','episodes', 'gender'])
df = pd.DataFrame(data, columns = ['name','episodes', 'gender'])
for names in df['name']:
if (df[df['name'].str.contains(f'{names}')]['episodes']).any() == (df1[df1['name'].str.contains(f'{names}')]['episodes']).any():
print('True')
else:
print('False')
它正在检查两个数据帧之间的剧集数量是否不同,并且应该打印 false
它们是不同的剧集。但是我得到了所有 True
True
True
True
True
True
True
为什么不打印false?
你可以使用.eq()
方法:
print(df.episodes.eq(df1.episodes))
0 False
1 False
2 True
3 False
4 True
5 True
Name: episodes, dtype: bool
我想你是想将 data1 放入 df1?现在,您已经单独从数据创建了 df1 和 df。另外,您真的不需要逐行检查它。 (df == df1)['episodes'] 应该给你你想要的。
使用 set_index
然后比较 episodes
列:
>>> df.set_index('name')['episodes'] == df1.set_index('name')['episodes']
name
Sheldon False
Penny False
Amy True
Penny False
Raj True
Sheldon True
Name: episodes, dtype: bool
我们可以试试merge
df.merge(df1,on='name',how='left').eval('episodes_x==episodes_y')
我有2个相同的dataframes,我们可以以此为例
import pandas as pd
import numpy as np
data = {'name': ['Sheldon', 'Penny', 'Amy', 'Penny', 'Raj', 'Sheldon'],
'episodes': [42, 24, 31, 29, 37, 40],
'gender': ['male', 'female', 'female', 'female', 'male', 'male']}
data1 = {'name': ['Sheldon', 'Penny', 'Amy', 'Penny', 'Raj', 'Sheldon'],
'episodes': [12, 32, 31, 32, 37, 40],
'gender': ['male', 'female', 'female', 'female', 'male', 'male']}
df1 = pd.DataFrame(data1, columns = ['name','episodes', 'gender'])
df = pd.DataFrame(data, columns = ['name','episodes', 'gender'])
for names in df['name']:
if (df[df['name'].str.contains(f'{names}')]['episodes']).any() == (df1[df1['name'].str.contains(f'{names}')]['episodes']).any():
print('True')
else:
print('False')
它正在检查两个数据帧之间的剧集数量是否不同,并且应该打印 false
它们是不同的剧集。但是我得到了所有 True
True
True
True
True
True
True
为什么不打印false?
你可以使用.eq()
方法:
print(df.episodes.eq(df1.episodes))
0 False
1 False
2 True
3 False
4 True
5 True
Name: episodes, dtype: bool
我想你是想将 data1 放入 df1?现在,您已经单独从数据创建了 df1 和 df。另外,您真的不需要逐行检查它。 (df == df1)['episodes'] 应该给你你想要的。
使用 set_index
然后比较 episodes
列:
>>> df.set_index('name')['episodes'] == df1.set_index('name')['episodes']
name
Sheldon False
Penny False
Amy True
Penny False
Raj True
Sheldon True
Name: episodes, dtype: bool
我们可以试试merge
df.merge(df1,on='name',how='left').eval('episodes_x==episodes_y')