在数据框的 2 变量中查找差异和共同点

我试图找到每行的 2 个单元格之间的差异,并提取差异和 2 个新列的共同点。


这是 DataFrame 的示例


df = pd.DataFrame({'ID': [1,2,3,4,5],'Tag1':["English,French",'Hindi,English','Kannada','French','German'],'Tag2':['Kannada','English,Hindi',                                                                                                'Kannada,Hindi','French,English','Kannada,German']})


ID  Tag1            Tag2

1   English,French  Kannada

2   Hindi,English   English,Hindi

3   Kannada         Kannada,Hindi

4   French          French,English

5   German          Kannada,German

我想通过将 Tag1 中的新列“差异”和 Tag1 和 Tag2 之间的所有共同点作为“共同点”添加到新列中来找到添加 Tag2 的所有新的不同语言


我需要得到的最终输出或结果:


ID  Tag1            Tag2            Difference  Common

1   English,French  Kannada         Kannada     NaN

2   Hindi,English   English,Hindi   NaN         Hindi,English

3   Kannada         Kannada,Hindi   Hindi       Kannada

4   French          French,English  English     French

5   German          Kannada,German  Kannada     German

注意:这只是我拥有的庞大数据集的一小部分数据,它有超过 300 000 行,列 Tag1 和 Tag2 有超过 5 种语言。


我已经尝试过一周内可以在线获得的几乎所有内容,但找不到最佳方法。


犯罪嫌疑人X
浏览 134回答 2
2回答

繁星coding

这是 Python 中另一个版本的用法set。这应该快得多,因为它使用向量操作。df['set_Tag1'] = df['Tag1'].apply(lambda x: x.split(',')).map(set)df['set_Tag2'] = df['Tag2'].apply(lambda x: x.split(',')).map(set)df['diff'] = (df['set_Tag2'] - df['set_Tag1']).apply(lambda x: ','.join(x))df['common'] = df.apply(lambda row: row['set_Tag2'] & row['set_Tag1'], axis=1).apply(lambda x: ','.join(x))df.drop(columns=['set_Tag1', 'set_Tag2'], inplace=True)

动漫人物

在python中可以使用set数据结构进行交集、并集、差集等运算。您可以执行以下操作。# A function which returns b - a, given a and b are arrays/listsdef diff(a,b):    a = a.split(',') # split string by ','    b = b.split(',')    return ','.join(list(set(b) - set(a))) # find difference and then join the result by ','# A function which returns common elements between a and b are arrays/listsdef common(a,b):    a = a.split(',')    b = b.split(',')    return ','.join(list(set(b).intersection(set(a))))# initialize your dataframe as you have provided in the questiondf = pd.DataFrame({'ID': [1,2,3,4,5],'Tag1':["English,French",'Hindi,English','Kannada','French','German'],'Tag2':['Kannada','English,Hindi', 'Kannada,Hindi','French,English','Kannada,German']})# add new columns for difference and commondf['common'] = [common(df['Tag1'][i],df['Tag2'][i]) for i in df.index]df['diff'] = [diff(df['Tag1'][i],df['Tag2'][i]) for i in df.index]结果 df 如下所示。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python