将一个数据框中的一列与另一个数据框中的其他两列进行比较?

时间:2019-11-18 07:23:09

标签: python pandas

我已经从两个tsv文件创建了两个数据帧。数据帧如下:

Dataframe1 (df1)
chr    position
5      745
7      963
8      1024

Dataframe2 (df2)
chr    start    end
1      10       100
1      500      600
5      250      600
5      784      1045
7      98       980
7      11       85
8      450      1000
8      1546     1886
12     63       1400

现在,我想创建一个新的df1列,如果相同chr的位置落在df2的startend之内,它将给出'True'。我正在使用以下代码:

df1['Valid'] = np.where((df1['chr'] == df2['chr']) & (df1['position'] >= df2['start']) & (df1['position'] <= df2['end']),'True','False')

这不起作用,并显示错误消息-ValueError:只能比较标记相同的Series对象。该怎么做?

预期输出为:

Dataframe1 (df1)
chr    position    Valid
5      745         False
7      963         True
8      1024        False

3 个答案:

答案 0 :(得分:2)

合并数据框,求值,然后删除未使用的列。

>>> (df1
 .merge(df2, on='chr', how='left')
 .assign(Valid=lambda df: df.eval('start <= position <= end'))
 .drop(columns=['start', 'end'])
)
   chr  position  Valid
0    5       745  False
1    7       963   True
2    8      1024  False

如果chr中有多个df2值,请将position合并到df2上,对每个值求值,然后对chr进行分组并确定是否任何职位均有效。将结果分配回df1

valid = (
    df2
    .merge(df1, on='chr', how='right')
    .assign(Valid=lambda df: df.eval('start <= position <= end'))
    .groupby('chr')['Valid'].any()
)
>>> df1.merge(valid, left_on='chr', right_index=True)
   chr  position  Valid
0    5       745  False
1    7       963   True
2    8      1024  False

答案 1 :(得分:0)

看看:



import pandas as pd
import numpy as np
df1 = pd.DataFrame({'chr': [5,7,8],
                   'position': [745, 963,1024]})

df2 = pd.DataFrame({'chr': [1,5,7,8,12],
                   'start': [10,250,98,450,63],
                    'end':[100,600,980,1000,1400]})

df2 = df2.loc[df2['chr'].isin(df1.chr)].reset_index(drop=True)

df1['Valid'] = np.where((df1['chr'] == df2['chr']) & (df1['position'] >= df2['start']) & (df1['position'] <= df2['end']),'True','False')
print(df1)

和输出:

   chr  position  Valid
0    5       745  False
1    7       963   True
2    8      1024  False

答案 2 :(得分:0)

我将export inteface ICourse { id: number; name: string; year: string; } mapany一起使用布尔掩码

groupby