spatialdata icon indicating copy to clipboard operation
spatialdata copied to clipboard

Filter spatialData

Open lopollar opened this issue 1 year ago • 2 comments

Idea for enhancement: Add a filter option to the spatialdata object, where it is possible to filter out certain cells, based on a column in the table. This can be relevant to for example large cells. In line with the sc.pp.filter_cells. A similar function exists in spatialdata: sdata.pp.get_elements, but this does not work on obs or shapes information. This would then work on shapes and table simultaneously. Currently, I only get this to work by overwriting the objects, as shown here. Is there a better way?

for i in [*sdata.shapes]:
    sdata[i].index = sdata[i].index.astype("str")
    sdata.add_shapes(
        name=i,
        shapes=spatialdata.models.ShapesModel.parse(
            sdata[i][np.isin(sdata[i].index.values, sdata.table.obs.index.values)]
        ),
        overwrite=True,
    )

lopollar avatar May 31 '23 12:05 lopollar

this is very much in the roadmap @lopollar , thanks for bringing it up!

I think this could be done in two different ways (both could be supported)

sdata = sdata[sdata.table.obs.celltype == "celltypeA"]
>>> sdata.table.obs.celltype.unique()
["celltypeA"]

https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.query.html

wdyt?

giovp avatar Jun 22 '23 21:06 giovp

Hi, For me, the first feels like how I wouldcode it myself, so I would prefer that one! Thank you for taking my suggestion into account!

lopollar avatar Jun 23 '23 11:06 lopollar