我想比较column1和column2并从column1获取唯一值(忽略NaN
)。所以在这种情况下,我应该test1
,test4
。
另外,我们可以在另一列中创建并存储结果吗?
Column1 column2
0 test1 test2
1 test2 test3
2 test3 hello
3 test4 world
4 NaN how
5 NaN are
6 NaN you
答案 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)
不引用列名称 解释
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)