DataFrame列比较

时间:2018-10-09 00:37:12

标签: python regex pandas merge

我是python的初学者,并且很难找到有关如何解决遇到的问题的文档。

我需要知道df1 ['id']中的值是否在df2 ['id_list']中,但是当我看到这些值是如何存储在df2中时遇到了一个障碍

当我导出创建“ id_list”系列的值时,它的打印效果与我在下面复制的内容完全相同,并且存在很多问题。我不确定如何比较不同的系列元素。

希望这是有道理的,感谢您的帮助!

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)

1 个答案:

答案 0 :(得分:0)

对于这种字符串问题,列表理解通常比内置的pandas字符串方法要快。您可以执行以下操作:

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