比较两个列值并从第一列获取不同的值

时间:2017-03-30 20:36:21

标签: python pandas numpy

我想比较column1和column2并从column1获取唯一值(忽略NaN)。所以在这种情况下,我应该test1test4

另外,我们可以在另一列中创建并存储结果吗?

    Column1 column2    
0   test1   test2   
1   test2   test3   
2   test3   hello  
3   test4   world   
4     NaN     how  
5     NaN     are   
6     NaN     you

2 个答案:

答案 0 :(得分:1)

您可以通过

获取这些值
set(df.column1)-set(df.column2)-set([None])

此外,如果您想将结果存储在另一列中,您可以执行以下操作:

import pandas as pd    
df=pd.DataFrame({'column1':['t1','t2','t3',None],'column2':['t1','a',None,None]})
unique_vals=list(set(df.column1)-set(df.column2)-set([None]))
df['new_col']=unique_vals+['None']*(len(df)-len(unique_vals))
df

结果是:

  column1   column2 new_col
0   t1       t1      t2
1   t2       a       t3
2   t3      None    None
3   None    None    None

答案 1 :(得分:1)

不引用列名称 解释

  • I stack因为它是一种方便的方法来放弃nan而不强迫矩形。
  • level=1分组与堆叠前的列相同。
  • 应用set将允许我使用减法或diff,这被解释为set.difference这就是我们想要的。
  • [::-1]只是颠倒顺序,所以我得到了正确的区别。
np.diff(df.stack().groupby(level=1).apply(set).values[::-1])

array([{'test4', 'test1'}], dtype=object)