我有相互作用由染色體(CHR)表示染色體對一個數據幀,和位置(POS),如下所示:子集數據幀具有不同長度的另一個數據幀
>>>import pandas as pd
>>>df1
chr1 pos1 chr2 pos2
chr1 54278 chr13 68798
chr1 32145 chr7 1248798
...
[162689366 rows x 4 columns]
在真實數據組,這些被分選通過chr1,然後pos1,chr2,pos2。
我與相互作用對我不妨先看看下面的格式的另一個數據集:
>>>df2
chr start stop comment
chr1 54275 55080 cluster-1
chr1 515523 515634 cluster-2
...
chr13 68760 70760
...
[69 rows x 4 columns]
我想子集DF1,包括行,當且僅當兩者的相互作用對(CHR 1 POS1 & CHR2 -pos2)在df2的開始和停止值範圍內。
在這個例子中,最終的數據幀將是這個樣子:
>>>df3
chr1 pos1 chr2 pos2
chr1 54278 chr13 68798
...
我一直在努力明智做到這一步(第一個CHR-POS對,那麼第二個)使用.between功能在熊貓沒有任何成功。我已經嘗試了python2.7和python3.6。
>>>df3 = df1[(df1['chr1'].isin(df2.chr)) & df1['pos1'].between(df1.pos1(df2.start),df1.pos1(df2.stop))]
這似乎適用於.isin但我得到..The函數的錯誤。我認爲,因爲數據幀長度不一樣,但我無法確定。
>>>df1['pos1'].between(df2.start,df2.stop)
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.7/dist-packages/pandas/core/series.py", line 2412, in between
lmask = self >= left
File "/usr/lib/python2.7/dist-packages/pandas/core/ops.py", line 699, in wrapper
raise ValueError('Series lengths must match to compare')
ValueError: Series lengths must match to compare
任何幫助,非常感謝!