为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

犯罪嫌疑人X 2022-06-02 15:49:32
我试图找到每行的 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            Tag21   English,French  Kannada2   Hindi,English   English,Hindi3   Kannada         Kannada,Hindi4   French          French,English5   German          Kannada,German我想通过将 Tag1 中的新列“差异”和 Tag1 和 Tag2 之间的所有共同点作为“共同点”添加到新列中来找到添加 Tag2 的所有新的不同语言我需要得到的最终输出或结果:ID  Tag1            Tag2            Difference  Common1   English,French  Kannada         Kannada     NaN2   Hindi,English   English,Hindi   NaN         Hindi,English3   Kannada         Kannada,Hindi   Hindi       Kannada4   French          French,English  English     French5   German          Kannada,German  Kannada     German注意:这只是我拥有的庞大数据集的一小部分数据,它有超过 300 000 行,列 Tag1 和 Tag2 有超过 5 种语言。我已经尝试过一周内可以在线获得的几乎所有内容,但找不到最佳方法。
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

这是 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)


查看完整回答
反对 回复 2022-06-02
?
动漫人物

TA贡献1815条经验 获得超10个赞

在python中可以使用set数据结构进行交集、并集、差集等运算。


您可以执行以下操作。


# A function which returns b - a, given a and b are arrays/lists

def 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/lists

def 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 question

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']})


# add new columns for difference and common

df['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 如下所示。

//img1.sycdn.imooc.com//62986baf00016b9d04280179.jpg

查看完整回答
反对 回复 2022-06-02
  • 2 回答
  • 0 关注
  • 133 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信