Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 在dataframe的2变量中查找差异和共同点_Python_Jupyter Notebook - Fatal编程技术网

Python 在dataframe的2变量中查找差异和共同点

Python 在dataframe的2变量中查找差异和共同点,python,jupyter-notebook,Python,Jupyter Notebook,我试图找出每行2个单元格之间的差异,并提取这两个新列的差异和共同点 下面是数据帧的一个示例 df = pd.DataFrame({'ID': [1,2,3,4,5],'Tag1':["English,French",'Hindi,English','Kannada','French','German'],'Tag2':['Kannada','English,Hindi',

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

下面是数据帧的一个示例

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
注意:这只是我拥有的巨大数据集中数据的一个小表示,数据集有超过300000行和列Tag1&Tag2,包含5种以上的语言


从一周开始,我几乎做了所有在线可用的事情,但找不到最好的方法。

在python中,您可以使用设置的数据结构来执行交叉、并集和差分等操作

你可以做如下的事情

# 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如下所示

希望这有帮助:)


干杯

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