Python 数据帧列比较
我是python的初学者,很难找到关于如何解决遇到的问题的文档 我需要知道df1['id']中的值是否在df2['id_list']中,但是当我看到值是如何存储在df2中时遇到了一个障碍 当我导出创建我的“id_列表”系列的值时,它会像我在下面复制的一样打印出来,这就是问题所在。我不知道如何比较系列中如此不同的元素 希望这是有意义的,并感谢任何帮助Python 数据帧列比较,python,regex,pandas,merge,Python,Regex,Pandas,Merge,我是python的初学者,很难找到关于如何解决遇到的问题的文档 我需要知道df1['id']中的值是否在df2['id_list']中,但是当我看到值是如何存储在df2中时遇到了一个障碍 当我导出创建我的“id_列表”系列的值时,它会像我在下面复制的一样打印出来,这就是问题所在。我不知道如何比较系列中如此不同的元素 希望这是有意义的,并感谢任何帮助 import pandas as pd df1 = {'id':['xx00000001', 'xx00000002', 'xx00000003'
import pandas as pd
df1 = {'id':['xx00000001', 'xx00000002', 'xx00000003', 'xx00000004', 'xx00000005']
}
df2={'id_list': ['text','xx00000001\r\nxx00000003\r\nxx00000004', 'xx00000003', 'xx00000004\r\ntext\r\nxx00000006', 'ss11111\r\ntext\r\nzz00000006\r\nxx00000005']
}
desired = {'id':['xx00000001', 'xx00000002', 'xx00000003', 'xx00000004', 'xx00000005'],
'id_list': ['text','xx00000001\r\nxx00000003\r\nxx00000004', 'xx00000003', 'xx00000004\r\ntext\r\nxx00000006', 'ss11111\r\ntext\r\nzz00000006\r\nxx00000005'],
'located': [False, False, 'xx00000003', 'xx00000004', 'xx00000005']
}
df1=pd.DataFrame(df1)
df2=pd.DataFrame(df2)
desired_df = pd.DataFrame(desired)
print(df1)
print(df2)
print(desired_df)
对于这种字符串问题,列表理解通常比内置的
pandas
string方法更快。您可以这样做:
desired_df = df1.join(df2)
desired_df['located'] = [i1 if i1 in i2 else False for i1, i2 in zip(df1['id'], df2['id_list']) ]
>>> desired_df
id id_list located
0 xx00000001 text False
1 xx00000002 xx00000001\r\nxx00000003\r\nxx00000004 False
2 xx00000003 xx00000003 xx00000003
3 xx00000004 xx00000004\r\ntext\r\nxx00000006 xx00000004
4 xx00000005 ss11111\r\ntext\r\nzz00000006\r\nxx00000005 xx00000005