比较两列,得到pandas中的唯一值

2024-10-01 05:00:01 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个数据帧,其中一些值在两个不同的列中

Ligand_hit,Ligand_miss
M00001,M00005
M00002,M00001
M00003,M00007
M00004,M00003

我想创建一个新的列,所有的值都在“Ligand_miss”中,而不是在“Ligand_hit”中。预期输出如下:

^{pr2}$

我试着用熊猫.isin,但它只输出布尔值。有没有一种简单的方法可以得到想要的结果?在


Tags: 数据方法ligandhitisinmisspr2m00002
3条回答

由于set,您可以简单地使用vanilla python:

In [129]: df
Out[129]: 
  Ligand_hit Ligand_miss
0     M00001      M00005
1     M00002      M00001
2     M00003      M00007
3     M00004      M00003

In [130]: pd.concat([df, pd.Series(list(set(df['Ligand_miss'].values) - set(df['Ligand_hit'].values)))], ignore_index=True, axis=1)
Out[130]: 
        0       1       2
0  M00001  M00005  M00007
1  M00002  M00001  M00005
2  M00003  M00007     NaN
3  M00004  M00003     NaN

一些解释:

  • set(df['Ligand_miss'].values)set(df['Ligand_hit'].values)获得这两列中的唯一值。

  • set(...) - set(...)根据您的要求计算差异(“唯一”)。

  • ^{}将结果合并到原始数据帧中。

熊猫的直接解决方案是:

df["Unique"] = df["Ligand_miss"][~df["Ligand_miss"].isin(df["Ligand_hit"])].drop_duplicates()

  Ligand_hit Ligand_miss  Unique
0     M00001      M00005  M00005
1     M00002      M00001     NaN
2     M00003      M00007  M00007
3     M00004      M00003     NaN

这将为唯一值提供索引查找。在

基本的列表理解可以做到:

[i for i in df.Ligand_miss if i not in df.Ligand_hit]

您也可以为此使用集合:

^{pr2}$

相关问题 更多 >