11import pandas as pd
22import numpy as np
33
4+ from ncls import NCLS
5+
46
57def add_rows_per_group (df ):
68 last_rows = df .groupby ("__ix__" ).last ().reset_index ()
@@ -9,79 +11,79 @@ def add_rows_per_group(df):
911 df = df .sort_values ("__ix__" , ascending = True )
1012 return df
1113
12- def _subtraction (scdf , ** kwargs ):
13- if scdf .empty :
14- return scdf
14+ # def _subtraction(scdf, **kwargs):
15+ # if scdf.empty:
16+ # return scdf
1517
16- falses = np .zeros (len (scdf ), dtype = bool )
17- scdf .insert (scdf .shape [1 ], "__first__" , falses )
18- scdf .insert (scdf .shape [1 ], "__last__" , falses )
18+ # falses = np.zeros(len(scdf), dtype=bool)
19+ # scdf.insert(scdf.shape[1], "__first__", falses)
20+ # scdf.insert(scdf.shape[1], "__last__", falses)
1921
20- scdf = add_rows_per_group (scdf )
22+ # scdf = add_rows_per_group(scdf)
2123
22- scdf .insert (scdf .shape [1 ], "NewStart" , scdf .End__deleteme__ .shift (fill_value = - 1 ))
23- scdf .insert (scdf .shape [1 ], "NewEnd" , scdf .Start__deleteme__ )
24- scdf .insert (scdf .shape [1 ], "__ix2__" , np .arange (len (scdf )))
24+ # scdf.insert(scdf.shape[1], "NewStart", scdf.End__deleteme__.shift(fill_value=-1))
25+ # scdf.insert(scdf.shape[1], "NewEnd", scdf.Start__deleteme__)
26+ # scdf.insert(scdf.shape[1], "__ix2__", np.arange(len(scdf)))
2527
26- first_rows = scdf .groupby (scdf .__ix__ , as_index = False ).first ()
27- scdf .loc [scdf .__ix2__ .isin (first_rows .__ix2__ ), "__first__" ] = True
28+ # first_rows = scdf.groupby(scdf.__ix__, as_index=False).first()
29+ # scdf.loc[scdf.__ix2__.isin(first_rows.__ix2__), "__first__"] = True
2830
29- scdf .loc [:, "NewStart" ] = np .where (scdf .__first__ , scdf .Start , scdf .NewStart )
31+ # scdf.loc[:, "NewStart"] = np.where(scdf.__first__, scdf.Start, scdf.NewStart)
3032
31- scdf .loc [scdf .__first__ & ~ (scdf .Start__deleteme__ >= scdf .Start ), "NewStart" ] = - 1
32- scdf .loc [:, "NewEnd" ] = np .where (scdf .__last__ , scdf .End , scdf .NewEnd )
33- scdf .loc [:, "NewStart" ] = np .where (scdf .__last__ , scdf .End__deleteme__ , scdf .NewStart )
34- scdf .loc [scdf .__last__ & ~ (scdf .End__deleteme__ <= scdf .End ), ["NewEnd" , "NewStart" ]] = - 1
33+ # scdf.loc[scdf.__first__ & ~(scdf.Start__deleteme__ >= scdf.Start), "NewStart"] = -1
34+ # scdf.loc[:, "NewEnd"] = np.where(scdf.__last__, scdf.End, scdf.NewEnd)
35+ # scdf.loc[:, "NewStart"] = np.where(scdf.__last__, scdf.End__deleteme__, scdf.NewStart)
36+ # scdf.loc[scdf.__last__ & ~(scdf.End__deleteme__ <= scdf.End), ["NewEnd", "NewStart"]] = -1
3537
3638
37- scdf = scdf [~ ((scdf .NewStart == - 1 ) | (scdf .NewEnd == - 1 ))]
38- scdf = scdf .drop (["Start" , "End" ], axis = 1 )
39- scdf .rename (columns = {"NewStart" : "Start" , "NewEnd" : "End" }, inplace = True )
39+ # scdf = scdf[~((scdf.NewStart == -1) | (scdf.NewEnd == -1))]
40+ # scdf = scdf.drop(["Start", "End"], axis=1)
41+ # scdf.rename(columns={"NewStart": "Start", "NewEnd": "End"}, inplace=True)
4042
41- remove_mask = scdf .Start >= scdf .End
43+ # remove_mask = scdf.Start >= scdf.End
4244
43- return scdf [~ remove_mask ]
45+ # return scdf[~remove_mask]
4446
45- # def _subtraction(scdf, ocdf, **kwargs):
47+ def _subtraction (scdf , ocdf , ** kwargs ):
4648
47- # if ocdf.empty or scdf.empty:
48- # return scdf
49+ if ocdf .empty or scdf .empty :
50+ return scdf
4951
50- # strandedness = kwargs["strandedness"]
51- # strand = True if strandedness else False
52+ strandedness = kwargs ["strandedness" ]
53+ strand = True if strandedness else False
5254
53- # chromosome = scdf.Chromosome.head(1).iloc[0]
54- # kwargs["chromosome"] = chromosome
55+ chromosome = scdf .Chromosome .head (1 ).iloc [0 ]
56+ kwargs ["chromosome" ] = chromosome
5557
56- # if "Strand" in ocdf and strand:
57- # strand = scdf.Strand.head(1).iloc[0]
58- # kwargs["strand"] = strand
58+ if "Strand" in ocdf and strand :
59+ strand = scdf .Strand .head (1 ).iloc [0 ]
60+ kwargs ["strand" ] = strand
5961
60- # o = NCLS(ocdf.Start.values, ocdf.End.values, ocdf.index.values)
62+ o = NCLS (ocdf .Start .values , ocdf .End .values , ocdf .index .values )
6163
62- # idx_self, new_starts, new_ends = o.set_difference_helper(
63- # scdf.Start.values, scdf.End.values, scdf.index.values)
64+ idx_self , new_starts , new_ends = o .set_difference_helper (
65+ scdf .Start .values , scdf .End .values , scdf .index . values , scdf . __num__ .values )
6466
65- # missing_idx = pd.Index(scdf.index).difference(idx_self)
67+ missing_idx = pd .Index (scdf .index ).difference (idx_self )
6668
67- # idx_to_drop = new_starts != -1
69+ idx_to_drop = new_starts != - 1
6870
69- # new_starts = new_starts[idx_to_drop]
70- # new_ends = new_ends[idx_to_drop]
71+ new_starts = new_starts [idx_to_drop ]
72+ new_ends = new_ends [idx_to_drop ]
7173
72- # idx_self = idx_self[idx_to_drop]
73- # new_starts = pd.Series(new_starts, index=idx_self)
74- # new_ends = pd.Series(new_ends, index=idx_self)
74+ idx_self = idx_self [idx_to_drop ]
75+ new_starts = pd .Series (new_starts , index = idx_self )
76+ new_ends = pd .Series (new_ends , index = idx_self )
7577
76- # scdf = scdf.reindex(missing_idx.union(idx_self)).sort_index()
77- # new_starts = new_starts.sort_index()
78- # new_ends = new_ends.sort_index()
78+ scdf = scdf .reindex (missing_idx .union (idx_self )).sort_index ()
79+ new_starts = new_starts .sort_index ()
80+ new_ends = new_ends .sort_index ()
7981
80- # if len(idx_self):
81- # scdf.loc[scdf.index.isin(idx_self), "Start"] = new_starts.values
82- # scdf.loc[scdf.index.isin(idx_self), "End"] = new_ends.values
82+ if len (idx_self ):
83+ scdf .loc [scdf .index .isin (idx_self ), "Start" ] = new_starts .values
84+ scdf .loc [scdf .index .isin (idx_self ), "End" ] = new_ends .values
8385
84- # if not scdf.empty:
85- # return scdf
86- # else:
87- # return None
86+ if not scdf .empty :
87+ return scdf
88+ else :
89+ return None
0 commit comments