Use proteomics data from PRIDE Data (adipose tissue)#

This notebook shows how acore can be used to download data from the Proteomics Identifications Database - PRIDE - (ebi.ac.uk/pride/) and parse the data to be used in the analytics core and quickly formated to start analyzing them with the functionality in the analytics core.

based on CKG recipe: Download PRIDE Data

%pip install acore

Hide code cell output

Requirement already satisfied: acore in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (0.3.0)
Requirement already satisfied: numpy in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (2.4.6)
Requirement already satisfied: pandas in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (2.3.3)
Requirement already satisfied: dsp-pandas in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (0.0.5)
Requirement already satisfied: scipy in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (1.17.1)
Requirement already satisfied: scikit-learn>=1.5 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (1.9.0)
Requirement already satisfied: gseapy!=1.1.5 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (1.2.1)
Requirement already satisfied: pingouin<0.6.0 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (0.5.5)
Requirement already satisfied: umap-learn in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (0.5.12)
Requirement already satisfied: statsmodels in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (0.14.6)
Requirement already satisfied: combat in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (0.3.3)
Requirement already satisfied: inmoose in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (0.9.1)
Requirement already satisfied: requests in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (2.34.2)
Requirement already satisfied: rarfile in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (4.2)
Requirement already satisfied: pandera in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from acore) (0.31.1)
Requirement already satisfied: matplotlib in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pingouin<0.6.0->acore) (3.11.0)
Requirement already satisfied: pandas-flavor in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pingouin<0.6.0->acore) (0.8.1)
Requirement already satisfied: seaborn in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pingouin<0.6.0->acore) (0.13.2)
Requirement already satisfied: tabulate in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pingouin<0.6.0->acore) (0.10.0)
Requirement already satisfied: contourpy>=1.0.1 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from matplotlib->pingouin<0.6.0->acore) (1.3.3)
Requirement already satisfied: cycler>=0.10 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from matplotlib->pingouin<0.6.0->acore) (0.12.1)
Requirement already satisfied: fonttools>=4.22.0 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from matplotlib->pingouin<0.6.0->acore) (4.63.0)
Requirement already satisfied: kiwisolver>=1.3.1 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from matplotlib->pingouin<0.6.0->acore) (1.5.0)
Requirement already satisfied: packaging>=20.0 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from matplotlib->pingouin<0.6.0->acore) (26.2)
Requirement already satisfied: pillow>=9 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from matplotlib->pingouin<0.6.0->acore) (12.2.0)
Requirement already satisfied: pyparsing>=3 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from matplotlib->pingouin<0.6.0->acore) (3.3.2)
Requirement already satisfied: python-dateutil>=2.7 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from matplotlib->pingouin<0.6.0->acore) (2.9.0.post0)
Requirement already satisfied: pytz>=2020.1 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pandas->acore) (2026.2)
Requirement already satisfied: tzdata>=2022.7 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pandas->acore) (2026.2)
Requirement already satisfied: six>=1.5 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from python-dateutil>=2.7->matplotlib->pingouin<0.6.0->acore) (1.17.0)
Requirement already satisfied: joblib>=1.4.0 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from scikit-learn>=1.5->acore) (1.5.3)
Requirement already satisfied: narwhals>=2.0.1 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from scikit-learn>=1.5->acore) (2.22.1)
Requirement already satisfied: threadpoolctl>=3.5.0 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from scikit-learn>=1.5->acore) (3.6.0)
Requirement already satisfied: mpmath>=1.1.0 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from combat->acore) (1.4.1)
Requirement already satisfied: patsy>=0.5.1 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from combat->acore) (1.0.2)
Requirement already satisfied: openpyxl in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from dsp-pandas->acore) (3.1.5)
Requirement already satisfied: anndata in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from inmoose->acore) (0.12.17)
Requirement already satisfied: fastcluster in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from inmoose->acore) (1.3.0)
Requirement already satisfied: jinja2 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from inmoose->acore) (3.1.6)
Requirement already satisfied: array-api-compat>=1.7.1 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from anndata->inmoose->acore) (1.15.0)
Requirement already satisfied: h5py>=3.8 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from anndata->inmoose->acore) (3.16.0)
Requirement already satisfied: legacy-api-wrap in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from anndata->inmoose->acore) (1.5)
Requirement already satisfied: natsort in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from anndata->inmoose->acore) (8.4.0)
Requirement already satisfied: scverse-misc>=0.0.3 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from anndata->inmoose->acore) (0.0.3)
Requirement already satisfied: zarr!=3.0.*,>=2.18.7 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from anndata->inmoose->acore) (3.1.6)
Requirement already satisfied: session-info2 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from scverse-misc>=0.0.3->anndata->inmoose->acore) (0.4.1)
Requirement already satisfied: typing-extensions in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from scverse-misc>=0.0.3->anndata->inmoose->acore) (4.15.0)
Requirement already satisfied: donfig>=0.8 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from zarr!=3.0.*,>=2.18.7->anndata->inmoose->acore) (0.8.1.post1)
Requirement already satisfied: google-crc32c>=1.5 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from zarr!=3.0.*,>=2.18.7->anndata->inmoose->acore) (1.8.0)
Requirement already satisfied: numcodecs>=0.14 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from zarr!=3.0.*,>=2.18.7->anndata->inmoose->acore) (0.16.5)
Requirement already satisfied: pyyaml in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from donfig>=0.8->zarr!=3.0.*,>=2.18.7->anndata->inmoose->acore) (6.0.3)
Requirement already satisfied: MarkupSafe>=2.0 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from jinja2->inmoose->acore) (3.0.3)
Requirement already satisfied: et-xmlfile in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from openpyxl->dsp-pandas->acore) (2.0.0)
Requirement already satisfied: xarray in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pandas-flavor->pingouin<0.6.0->acore) (2026.4.0)
Requirement already satisfied: pydantic in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pandera->acore) (2.13.4)
Requirement already satisfied: typeguard in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pandera->acore) (4.5.2)
Requirement already satisfied: typing_inspect>=0.6.0 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pandera->acore) (0.9.0)
Requirement already satisfied: mypy-extensions>=0.3.0 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from typing_inspect>=0.6.0->pandera->acore) (1.1.0)
Requirement already satisfied: annotated-types>=0.6.0 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pydantic->pandera->acore) (0.7.0)
Requirement already satisfied: pydantic-core==2.46.4 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pydantic->pandera->acore) (2.46.4)
Requirement already satisfied: typing-inspection>=0.4.2 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from pydantic->pandera->acore) (0.4.2)
Requirement already satisfied: charset_normalizer<4,>=2 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from requests->acore) (3.4.7)
Requirement already satisfied: idna<4,>=2.5 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from requests->acore) (3.18)
Requirement already satisfied: urllib3<3,>=1.26 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from requests->acore) (2.7.0)
Requirement already satisfied: certifi>=2023.5.7 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from requests->acore) (2026.5.20)
Requirement already satisfied: numba>=0.51.2 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from umap-learn->acore) (0.65.1)
Requirement already satisfied: pynndescent>=0.5 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from umap-learn->acore) (0.6.0)
Requirement already satisfied: tqdm in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from umap-learn->acore) (4.68.2)
Requirement already satisfied: llvmlite<0.48,>=0.47.0dev0 in /home/docs/checkouts/readthedocs.org/user_builds/analytics-core/envs/stable/lib/python3.11/site-packages (from numba>=0.51.2->umap-learn->acore) (0.47.0)
Note: you may need to restart the kernel to use updated packages.

Hide code cell source

from pathlib import Path

import numpy as np
import pandas as pd

import acore.io

Parameters#

Specify the PRIDE identifier and file to be downloaded and where to store intermediate files.

pxd_id: str = "PXD008541"  # PRIDE identifier
fname = "SearchEngineResults_secretome.zip.rar"  # file to download
folder_downloads = Path("downloaded")  # folder to download the file
folder_unzipped = Path("unzipped")  # folder to uncompress the file

Specify the PRIDE identifier and file to be downloaded#

We can use functionality in acore to directly download data files from EBI’s PRIDE database ebi.ac.uk/pride/. For that you just need to specify the PRIDE identifier for the project (PXD_...) and the name of the file to download. In this case, the project identifier is PXD008541 and the file we will use is SearchEngineResults_secretome.zip.rar, a RAR compressed file with the output files from MaxQuant.

ret = acore.io.download_PRIDE_data(pxd_id=pxd_id, file_name=fname, to=folder_downloads)
ret["acore_downloaded_file"] = folder_downloads / fname
ret
{'accession': 'PXD008541',
 'title': 'Human primary brown and white fat cell secretome',
 'additionalAttributes': [],
 'projectDescription': 'Secreted proteins from adipose tissue play a role in metabolic cross-talk and homeostasis. We performed high sensitivity mass spectrometry-based proteomics on the cell media of human adipocytes derived from the supraclavicular brown adipose and from the subcutaneous white adipose depots of adult humans. We identified 471 potentially secreted proteins covering interesting protein categories such as hormones, growth factors, extracellular matrix proteins and proteins of the complement system, which were differentially regulated in brown and white adipocytes. A total of 101 proteins were exclusively quantified in brown adipocytes and among these were ependymin-related protein 1 (EPDR1). Functional studies suggested a role for EPDR1 in thermogenic adipogenesis. In conclusion, we report substantial differences between the secretomes of brown and white human adipocytes and identify novel candidate batokines that can be important regulators of metabolism.',
 'sampleProcessingProtocol': 'Proteins from the conditioned media from brown and white fat cells were denatured with 2M urea, acetone precipitated overnight and digested using LysC and Trypsin enzymes. For the cellular proteome, samples were preapred according to iST protocol (Kulak et al 2014). The peptides were analyzed using LC-MS instrumentation consisting of an Easy nanoflow UHPLC (Thermo Fischer Scientific) coupled via a nanoelectrospray ion source (Thermo Fischer Scientific) to a Q Exactive mass spectrometer.Peptides were separated on a 50 cm column with 75 µm inner diameter packed in-house with ReproSil-Pur C18-aq 1.9 µm resin (Dr. Maisch). Peptides were loaded in buffer containing 0.5% formic acid and eluted with a 160 min linear gradient with buffer containing 80% acetonitrile and 0.5% formic acid (v/v) at 250 nL/min. Chromatography and column oven (Sonation GmbH) temperature were controlled and monitored in real time using SprayQC.',
 'dataProcessingProtocol': 'The raw files for secretome and cellular proteome were analyzed in the MaxQuant environment (Tyanova et al., 2016). The initial maximum allowed mass deviation was set to 6 ppm for monoisotopic precursor ions and 20 ppm for MS/MS peaks. Enzyme specificity was set to trypsin, defined as C-terminal to arginine and lysine excluding proline, and a maximum of two missed cleavages was allowed. A minimal peptide length of six amino acids was required. Carbamidomethylcysteine was set as a fixed modification, while N-terminal acetylation and methionine oxidation were set as variable modification. The spectra were searched by the Andromeda search engine against the human UniProt sequence database with 248 common contaminants and concatenated with the reversed versions of all sequences. The false discovery rate (FDR) was set to 1% for peptide and protein identifications. The peptide identifications across different LC-MS runs were matched by enabling the ‘match between runs’ feature in MaxQuant with a retention time window of 30 s. If the identified peptides were shared between two or more proteins, these were combined and reported in protein group. Contaminants and reverse identifications were removed from further data analysis. Protein quantification was based on the Max LFQ algorithm integrated into the MaxQuant software (Cox et al., 2014).',
 'projectTags': [],
 'keywords': ['Metabolism', 'Secretomics', 'White fat', 'Brown fat', 'Lcms'],
 'doi': '',
 'submissionType': 'PARTIAL',
 'license': 'Creative Commons Public Domain (CC0)',
 'submissionDate': '2019-09-19',
 'publicationDate': '2019-10-03',
 'submitters': [{'title': 'Professor',
   'firstName': 'atul shahaji',
   'lastName': 'deshmukh',
   'identifier': '61050142',
   'affiliation': 'Copenhagen University',
   'email': 'atul.deshmukh@cpr.ku.dk',
   'country': 'Denmark',
   'orcid': '0000-0002-2278-1843',
   'name': 'atul shahaji deshmukh',
   'id': '61050142'}],
 'labPIs': [{'title': 'Dr',
   'firstName': 'Matthias',
   'lastName': 'Mann',
   'identifier': '160150100',
   'affiliation': 'The Novo Nordisk Foundation Center for Protein Research, Faculty of Health and Medical Sciences, University of Copenhagen, Copenhagen, Denmark.',
   'email': 'mmann@biochem.mpg.de',
   'country': '',
   'orcid': '',
   'name': 'Matthias Mann',
   'id': '160150100'}],
 'instruments': [{'@type': 'CvParam',
   'cvLabel': 'MS',
   'accession': 'MS:1001911',
   'name': 'Q Exactive'}],
 'softwares': [{'@type': 'CvParam',
   'cvLabel': 'MS',
   'accession': 'MS:1001583',
   'name': 'MaxQuant'}],
 'experimentTypes': [{'@type': 'CvParam',
   'cvLabel': 'PRIDE',
   'accession': 'PRIDE:0000429',
   'name': 'Shotgun proteomics'}],
 'quantificationMethods': [{'@type': 'CvParam',
   'cvLabel': 'PRIDE',
   'accession': 'PRIDE:0000312',
   'name': 'Label free'}],
 'countries': ['Denmark'],
 'sampleAttributes': [{'@type': 'Tuple',
   'key': {'cvLabel': 'EFO',
    'accession': 'EFO:0000635',
    'name': 'organism part'},
   'value': [{'cvLabel': 'CL',
     'accession': 'CL:0000449',
     'name': 'brown fat cell'},
    {'cvLabel': 'BTO',
     'accession': 'BTO:0000156',
     'name': 'brown adipose tissue'},
    {'cvLabel': 'BTO',
     'accession': 'BTO:0001456',
     'name': 'white adipose tissue'},
    {'cvLabel': 'CL', 'accession': 'CL:0000448', 'name': 'white fat cell'}]},
  {'@type': 'Tuple',
   'key': {'cvLabel': 'EFO', 'accession': 'OBI:0100026', 'name': 'organism'},
   'value': [{'cvLabel': 'NEWT',
     'accession': 'NEWT:9606',
     'name': 'Homo sapiens (Human)'}]}],
 'organisms': [{'@type': 'CvParam',
   'cvLabel': 'NEWT',
   'accession': 'NEWT:9606',
   'name': 'Homo sapiens (human)'}],
 'organismParts': [{'@type': 'CvParam',
   'cvLabel': 'BTO',
   'accession': 'BTO:0000156',
   'name': 'Brown adipose tissue'},
  {'@type': 'CvParam',
   'cvLabel': 'BTO',
   'accession': 'BTO:0001456',
   'name': 'White adipose tissue'},
  {'@type': 'CvParam',
   'cvLabel': 'CL',
   'accession': 'CL:0000448',
   'name': 'White fat cell'},
  {'@type': 'CvParam',
   'cvLabel': 'CL',
   'accession': 'CL:0000449',
   'name': 'Brown fat cell'}],
 'diseases': [],
 'references': [],
 'identifiedPTMStrings': [{'@type': 'CvParam',
   'cvLabel': 'PRIDE',
   'accession': 'PRIDE:0000398',
   'name': 'No PTMs are included in the dataset'}],
 'totalFileDownloads': 9473,
 'botCount': 1252,
 'hubCount': 7985,
 'organicCount': 236,
 'acore_downloaded_file': PosixPath('downloaded/SearchEngineResults_secretome.zip.rar')}

Decompress rar File#

Pride results are compressed by the researcher themself, so many different file formats can be found. Here it was stored as a RAR archive. You will need to have a system installation of a rar archive tool to decompress the file, find it via google.

# ! you need a system installation of a rar archive tool
acore.io.unrar(filepath=ret["acore_downloaded_file"], to=folder_unzipped)
Extracting files: ['proteinGroups.txt', 'experimentalDesignTemplate.txt', 'modificationSpecificPeptides.txt', 'msms.txt', 'parameters.txt', 'peptides.txt']

The list of files within the compressed folder

list(folder_unzipped.iterdir())
[PosixPath('unzipped/peptides.txt'),
 PosixPath('unzipped/experimentalDesignTemplate.txt'),
 PosixPath('unzipped/modificationSpecificPeptides.txt'),
 PosixPath('unzipped/proteinGroups.txt'),
 PosixPath('unzipped/msms.txt'),
 PosixPath('unzipped/parameters.txt')]

Read and clean the data#

We use the proteinGroups file that contains the proteomics data processed using MaxQuant software.

fpath_proteinGroups = folder_unzipped / "proteinGroups.txt"
index_cols = [
    "Majority protein IDs",
]
data = pd.read_csv(fpath_proteinGroups, index_col=index_cols, sep="\t")
data.sample(5)
Protein IDs Peptide counts (all) Peptide counts (razor+unique) Peptide counts (unique) Protein names Gene names Fasta headers Number of proteins Peptides Razor + unique peptides ... Contaminant id Peptide IDs Peptide is razor Mod. peptide IDs Evidence IDs MS/MS IDs Best MS/MS Oxidation (M) site IDs Oxidation (M) site positions
Majority protein IDs
O75369;O75369-2;O75369-9;O75369-8;O75369-6;O75369-3;O75369-5;O75369-4;E7EN95;O75369-7 O75369;O75369-2;O75369-9;O75369-8;O75369-6;O75... 45;45;45;45;44;44;38;38;35;35;1 35;35;35;35;34;34;29;29;33;33;1 35;35;35;35;34;34;29;29;33;33;1 Filamin-B FLNB >sp|O75369|FLNB_HUMAN Filamin-B OS=Homo sapien... 11 45 35 ... NaN 721 473;627;966;1229;2190;2454;2463;2637;2987;3283... True;True;True;True;True;True;True;False;True;... 501;664;1014;1300;2298;2569;2579;2758;3128;343... 6648;6649;6650;6651;6652;6653;6654;6655;6656;6... 5428;5429;5430;5431;5432;7144;10364;13213;1321... 5431;7144;10364;13216;22477;24753;24873;26635;... NaN NaN
P25789;H0YMZ1;H0YL69;H0YMA1;H0YN18;H0YMI6;P25789-2;H0YLC2;H0YKT8 P25789;H0YMZ1;H0YL69;H0YMA1;H0YN18;H0YMI6;P257... 14;12;12;11;11;9;9;8;8;6;5;3 14;12;12;11;11;9;9;8;8;6;5;3 14;12;12;11;11;9;9;8;8;6;5;3 Proteasome subunit alpha type-4;Proteasome sub... PSMA4 >sp|P25789|PSA4_HUMAN Proteasome subunit alpha... 12 14 14 ... NaN 1,077 1542;4472;7379;8827;10107;10407;11279;11280;12... True;True;True;True;True;True;True;True;True;T... 1623;4670;7697;9210;10560;10884;10885;11797;11... 21045;21046;21047;21048;21049;21050;21051;2105... 16246;16247;16248;16249;16250;16251;16252;1625... 16255;44373;73042;88765;102747;106469;115581;1... 579 72
Q9P0L0;J3QKM9;Q9P0L0-2 Q9P0L0;J3QKM9;Q9P0L0-2 1;1;1 1;1;1 1;1;1 Vesicle-associated membrane protein-associated... VAPA >sp|Q9P0L0|VAPA_HUMAN Vesicle-associated membr... 3 1 1 ... NaN 586 6901 True 7200 89587;89588;89589;89590 67306 67306 NaN NaN
Q9Y5X3;Q5QPE4 Q9Y5X3;Q5QPE4;Q5QPE5 4;2;1 4;2;1 4;2;1 Sorting nexin-5 SNX5 >sp|Q9Y5X3|SNX5_HUMAN Sorting nexin-5 OS=Homo ... 3 4 4 ... NaN 1,952 227;9305;12347;16589 True;True;True;True 232;9710;13029;17463 2737;2738;2739;2740;2741;2742;2743;2744;2745;1... 2088;2089;2090;2091;2092;92828;92829;127647;18... 2092;92828;127647;180529 NaN NaN
Q04637;Q04637-3;Q04637-6;G5E9S1;Q04637-5;E7EX73;Q04637-4;E9PGM1;E7EUU4;D3DNT2;E9PFM1 Q04637;Q04637-3;Q04637-6;G5E9S1;Q04637-5;E7EX7... 16;16;16;16;16;16;16;16;16;16;16;6;4;4;4;4;2 16;16;16;16;16;16;16;16;16;16;16;6;4;4;4;4;2 16;16;16;16;16;16;16;16;16;16;16;6;4;4;4;4;2 Eukaryotic translation initiation factor 4 gam... EIF4G1 >sp|Q04637|IF4G1_HUMAN Eukaryotic translation ... 17 16 16 ... NaN 282 192;193;785;3269;3362;3366;3552;3997;5042;5179... True;True;True;True;True;True;True;True;True;T... 197;198;827;3421;3517;3521;3714;4178;5260;5406... 2305;2306;2307;2308;2309;2310;2311;2312;2313;2... 1759;1760;1761;1762;1763;1764;1765;1766;1767;1... 1766;1768;8667;33117;33764;33780;35875;40603;4... NaN NaN

5 rows × 215 columns

We mark the protein group by the first protein in the group, ensuring that the protein group is still unique.

new_index = data.index.str.split(";").str[0].rename("first_prot")
assert new_index.is_unique
data = data.reset_index()
data.index = new_index
data
Majority protein IDs Protein IDs Peptide counts (all) Peptide counts (razor+unique) Peptide counts (unique) Protein names Gene names Fasta headers Number of proteins Peptides ... Contaminant id Peptide IDs Peptide is razor Mod. peptide IDs Evidence IDs MS/MS IDs Best MS/MS Oxidation (M) site IDs Oxidation (M) site positions
first_prot
Q13443 Q13443;C9J6H5;C9JPM3;F8WC54;Q13443-2;A0AVL1 Q13443;C9J6H5;C9JPM3;F8WC54;Q13443-2;A0AVL1 1;1;1;1;1;1 1;1;1;1;1;1 1;1;1;1;1;1 Disintegrin and metalloproteinase domain-conta... ADAM9 >sp|Q13443|ADAM9_HUMAN Disintegrin and metallo... 6 1 ... NaN 0 2726 True 2849 36123;36124;36125;36126;36127;36128;36129;3613... 27484;27485;27486;27487;27488;27489;27490;2749... 27490 NaN NaN
Q08209 Q08209;Q08209-2;E7ETC2;A1A441;Q08209-3;P16298;... Q08209;Q08209-2;E7ETC2;A1A441;Q08209-3;P16298;... 4;4;4;4;4;2;2;2;2;2;2;1;1;1;1;1;1;1;1 4;4;4;4;4;2;2;2;2;2;2;1;1;1;1;1;1;1;1 4;4;4;4;4;2;2;2;2;2;2;1;1;1;1;1;1;1;1 Serine/threonine-protein phosphatase 2B cataly... PPP3CA;PPP3CB >sp|Q08209|PP2BA_HUMAN Serine/threonine-protei... 19 4 ... NaN 1 699;6176;15271;16451 True;True;True;True 738;6440;16080;17320 9593;9594;9595;9596;80162;80163;80164;80165;80... 7726;7727;60560;60561;60562;163519;163520;1635... 7727;60562;163524;178974 NaN NaN
A1L4H1 A1L4H1 A1L4H1 1 1 1 Soluble scavenger receptor cysteine-rich domai... SSC5D >sp|A1L4H1|SRCRL_HUMAN Soluble scavenger recep... 1 1 ... NaN 2 12914 True 13624 177453;177454 136581;136582 136581 NaN NaN
P63092 P63092;P04899;P08754;P63096;P09471;P38405;P190... P63092;P04899;P08754;P63096;P09471;P38405;P190... 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 Guanine nucleotide-binding protein G(s) subuni... GNAS;GNAI2;GNAI3;GNAI1;GNAO1;GNAL;GNAT2;GNAT3;... >sp|P63092|GNAS2_HUMAN Guanine nucleotide-bind... 22 1 ... NaN 3 10218 True 10674 137064;137065;137066;137067;137068;137069;1370... 103921;103922;103923;103924;103925;103926;1039... 103922 NaN NaN
P04156-2 P04156-2;A2A2V1;P04156 P04156-2;A2A2V1;P04156 1;1;1 1;1;1 1;1;1 Major prion protein PRNP >sp|P04156-2|PRIO_HUMAN Isoform 2 of Major pri... 3 1 ... NaN 4 18253 True 19215 255016;255017;255018;255019;255020;255021;2550... 199375 199375 NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
REV__Q9C0B6-2 REV__Q9C0B6-2;REV__Q9C0B6 REV__Q9C0B6-2;REV__Q9C0B6 1;1 1;1 1;1 NaN NaN >sp|Q9C0B6-2|FAM5B_HUMAN Isoform 2 of Protein ... 2 1 ... NaN 1,986 17362 True 18274 242825 190062 190062 NaN NaN
REV__Q9NQR7 REV__Q9NQR7 REV__Q9NQR7 1 1 1 NaN NaN >sp|Q9NQR7|CC177_HUMAN Coiled-coil domain-cont... 1 1 ... NaN 1,987 4228 True 4421 55922;55923;55924;55925;55926;55927;55928;5592... 42720;42721;42722;42723;42724 42722 NaN NaN
REV__Q9P2F5-2 REV__Q9P2F5-2;REV__Q9P2F5 REV__Q9P2F5-2;REV__Q9P2F5 1;1 1;1 1;1 NaN NaN >sp|Q9P2F5-2|STOX2_HUMAN Isoform 2 of Storkhea... 2 1 ... NaN 1,988 7838 True 8173 103152;103153;103154 77645 77645 NaN NaN
REV__Q9UHA2 REV__Q9UHA2 REV__Q9UHA2 1 1 1 NaN NaN >sp|Q9UHA2|S18L2_HUMAN SS18-like protein 2 OS=... 1 1 ... NaN 1,989 10636 True 11128 143091;143092;143093;143094;143095;143096;1430... 108950;108951;108952;108953;108954;108955;1089... 108954 NaN NaN
REV__Q9Y5F3 REV__Q9Y5F3 REV__Q9Y5F3 1 1 1 NaN NaN >sp|Q9Y5F3|PCDB1_HUMAN Protocadherin beta-1 OS... 1 1 ... NaN 1,990 9882 True 10321 132092;132093;132094;132095;132096;132097;1320... 100057;100058;100059;100060 100057 NaN NaN

1991 rows × 216 columns

Get ride of potential contaminants, reverse (decoys) and identified only by a modification site reference:

filters = ["Reverse", "Only identified by site", "Contaminant"]
data[filters].describe()
Reverse Only identified by site Contaminant
count 26 24 84
unique 1 1 1
top + + +
freq 26 24 84
mask = data[filters].isna().all(axis=1)
data = data.loc[mask]
data
Majority protein IDs Protein IDs Peptide counts (all) Peptide counts (razor+unique) Peptide counts (unique) Protein names Gene names Fasta headers Number of proteins Peptides ... Contaminant id Peptide IDs Peptide is razor Mod. peptide IDs Evidence IDs MS/MS IDs Best MS/MS Oxidation (M) site IDs Oxidation (M) site positions
first_prot
Q13443 Q13443;C9J6H5;C9JPM3;F8WC54;Q13443-2;A0AVL1 Q13443;C9J6H5;C9JPM3;F8WC54;Q13443-2;A0AVL1 1;1;1;1;1;1 1;1;1;1;1;1 1;1;1;1;1;1 Disintegrin and metalloproteinase domain-conta... ADAM9 >sp|Q13443|ADAM9_HUMAN Disintegrin and metallo... 6 1 ... NaN 0 2726 True 2849 36123;36124;36125;36126;36127;36128;36129;3613... 27484;27485;27486;27487;27488;27489;27490;2749... 27490 NaN NaN
Q08209 Q08209;Q08209-2;E7ETC2;A1A441;Q08209-3;P16298;... Q08209;Q08209-2;E7ETC2;A1A441;Q08209-3;P16298;... 4;4;4;4;4;2;2;2;2;2;2;1;1;1;1;1;1;1;1 4;4;4;4;4;2;2;2;2;2;2;1;1;1;1;1;1;1;1 4;4;4;4;4;2;2;2;2;2;2;1;1;1;1;1;1;1;1 Serine/threonine-protein phosphatase 2B cataly... PPP3CA;PPP3CB >sp|Q08209|PP2BA_HUMAN Serine/threonine-protei... 19 4 ... NaN 1 699;6176;15271;16451 True;True;True;True 738;6440;16080;17320 9593;9594;9595;9596;80162;80163;80164;80165;80... 7726;7727;60560;60561;60562;163519;163520;1635... 7727;60562;163524;178974 NaN NaN
A1L4H1 A1L4H1 A1L4H1 1 1 1 Soluble scavenger receptor cysteine-rich domai... SSC5D >sp|A1L4H1|SRCRL_HUMAN Soluble scavenger recep... 1 1 ... NaN 2 12914 True 13624 177453;177454 136581;136582 136581 NaN NaN
P63092 P63092;P04899;P08754;P63096;P09471;P38405;P190... P63092;P04899;P08754;P63096;P09471;P38405;P190... 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 Guanine nucleotide-binding protein G(s) subuni... GNAS;GNAI2;GNAI3;GNAI1;GNAO1;GNAL;GNAT2;GNAT3;... >sp|P63092|GNAS2_HUMAN Guanine nucleotide-bind... 22 1 ... NaN 3 10218 True 10674 137064;137065;137066;137067;137068;137069;1370... 103921;103922;103923;103924;103925;103926;1039... 103922 NaN NaN
P04156-2 P04156-2;A2A2V1;P04156 P04156-2;A2A2V1;P04156 1;1;1 1;1;1 1;1;1 Major prion protein PRNP >sp|P04156-2|PRIO_HUMAN Isoform 2 of Major pri... 3 1 ... NaN 4 18253 True 19215 255016;255017;255018;255019;255020;255021;2550... 199375 199375 NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
Q9Y6B6 Q9Y6B6;Q9H029;D6RDB2;D6RD69 Q9Y6B6;Q9H029;D6RDB2;D6RD69;D6R9R5 3;2;2;2;1 1;1;1;1;1 1;1;1;1;1 GTP-binding protein SAR1b SAR1B;DKFZp434B2017 >sp|Q9Y6B6|SAR1B_HUMAN GTP-binding protein SAR... 5 3 ... NaN 1,960 11056;12671;14121 False;True;False 11564;13369;14873 148661;148662;148663;148664;148665;148666;1486... 112725;112726;112727;112728;112729;134047;148469 112729;134047;148469 NaN NaN
Q9Y6C2 Q9Y6C2 Q9Y6C2;H0Y7A0 3;1 3;1 3;1 EMILIN-1 EMILIN1 >sp|Q9Y6C2|EMIL1_HUMAN EMILIN-1 OS=Homo sapien... 2 3 ... NaN 1,961 1197;10660;18081 True;True;True 1266;11154;19032 16443;143347;143348;143349;143350;143351;14335... 12937;109132;197424;197425 12937;109132;197425 NaN NaN
Q9Y6D6 Q9Y6D6;Q9Y6D5;E5RJN9;E5RHL7;E5RIF2 Q9Y6D6;Q9Y6D5;E5RJN9;E5RHL7;E5RIF2 2;1;1;1;1 2;1;1;1;1 2;1;1;1;1 Brefeldin A-inhibited guanine nucleotide-excha... ARFGEF1;ARFGEF2 >sp|Q9Y6D6|BIG1_HUMAN Brefeldin A-inhibited gu... 5 2 ... NaN 1,962 16763;18735 True;True 17643;19717 233551;233552;233553;233554;233555;233556;2335... 182340;204240;204241;204242 182340;204240 NaN NaN
Q9Y6G9 Q9Y6G9;C9JGM7;E9PHI6 Q9Y6G9;C9JGM7;E9PHI6 2;1;1 2;1;1 2;1;1 Cytoplasmic dynein 1 light intermediate chain 1 DYNC1LI1 >sp|Q9Y6G9|DC1L1_HUMAN Cytoplasmic dynein 1 li... 3 2 ... NaN 1,963 571;3033 True;True 604;3175 8034;8035;8036;8037;8038;8039;8040;8041;8042;8... 6590;6591;6592;6593;6594;6595;6596;6597;30946 6594;30946 NaN NaN
Q9Y6I3 Q9Y6I3;Q9Y6I3-3;Q9Y6I3-1 Q9Y6I3;Q9Y6I3-3;Q9Y6I3-1 2;2;2 2;2;2 2;2;2 Epsin-1 EPN1 >sp|Q9Y6I3|EPN1_HUMAN Epsin-1 OS=Homo sapiens ... 3 2 ... NaN 1,964 1486;15701 True;True 1565;16529 20438;20439;20440;20441;20442;218668;218669;21... 15899;169643;169644;169645;169646;169647;16964... 15899;169647 NaN NaN

1870 rows × 216 columns

Then we can filter the columns that contain the string LFQ intensity. The sample names are part of the column names (here: LFQ intensity {sample_name})

stub_intensity = "LFQ intensity"
pgs = data.filter(like=stub_intensity)
pgs
LFQ intensity BAT_NE1 LFQ intensity BAT_NE2 LFQ intensity BAT_NE3 LFQ intensity BAT_NE4 LFQ intensity BAT_NE5 LFQ intensity BAT_woNE1 LFQ intensity BAT_woNE2 LFQ intensity BAT_woNE3 LFQ intensity BAT_woNE4 LFQ intensity BAT_woNE5 LFQ intensity WAT_NE1 LFQ intensity WAT_NE2 LFQ intensity WAT_NE3 LFQ intensity WAT_NE4 LFQ intensity WAT_NE5 LFQ intensity WAT_woNE1 LFQ intensity WAT_woNE2 LFQ intensity WAT_woNE3 LFQ intensity WAT_woNE4 LFQ intensity WAT_woNE5
first_prot
Q13443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1,131,200
Q08209 0 0 10,454,000 0 8,308,300 0 0 7,068,900 0 5,833,600 0 0 0 0 0 0 13,239,000 0 0 10,794,000
A1L4H1 0 0 0 3,375,200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P63092 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8,852,600
P04156-2 0 0 0 0 0 0 0 0 0 0 0 0 0 8,068,200 0 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
Q9Y6B6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1,630,800 0 0 0 0 0
Q9Y6C2 0 0 0 0 0 0 0 0 0 0 0 0 4,651,500 0 0 0 0 0 0 0
Q9Y6D6 0 0 4,003,100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Q9Y6G9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9,301,900 0 0 9,676,800
Q9Y6I3 11,134,000 0 5,309,200 0 4,596,700 0 0 7,092,600 0 0 0 0 8,926,800 9,343,600 15,890,000 0 0 0 0 0

1870 rows × 20 columns

The associated metadata for protein groups we will keep for reference:

meta_pgs = data.drop(pgs.columns, axis=1)
meta_pgs
Majority protein IDs Protein IDs Peptide counts (all) Peptide counts (razor+unique) Peptide counts (unique) Protein names Gene names Fasta headers Number of proteins Peptides ... Contaminant id Peptide IDs Peptide is razor Mod. peptide IDs Evidence IDs MS/MS IDs Best MS/MS Oxidation (M) site IDs Oxidation (M) site positions
first_prot
Q13443 Q13443;C9J6H5;C9JPM3;F8WC54;Q13443-2;A0AVL1 Q13443;C9J6H5;C9JPM3;F8WC54;Q13443-2;A0AVL1 1;1;1;1;1;1 1;1;1;1;1;1 1;1;1;1;1;1 Disintegrin and metalloproteinase domain-conta... ADAM9 >sp|Q13443|ADAM9_HUMAN Disintegrin and metallo... 6 1 ... NaN 0 2726 True 2849 36123;36124;36125;36126;36127;36128;36129;3613... 27484;27485;27486;27487;27488;27489;27490;2749... 27490 NaN NaN
Q08209 Q08209;Q08209-2;E7ETC2;A1A441;Q08209-3;P16298;... Q08209;Q08209-2;E7ETC2;A1A441;Q08209-3;P16298;... 4;4;4;4;4;2;2;2;2;2;2;1;1;1;1;1;1;1;1 4;4;4;4;4;2;2;2;2;2;2;1;1;1;1;1;1;1;1 4;4;4;4;4;2;2;2;2;2;2;1;1;1;1;1;1;1;1 Serine/threonine-protein phosphatase 2B cataly... PPP3CA;PPP3CB >sp|Q08209|PP2BA_HUMAN Serine/threonine-protei... 19 4 ... NaN 1 699;6176;15271;16451 True;True;True;True 738;6440;16080;17320 9593;9594;9595;9596;80162;80163;80164;80165;80... 7726;7727;60560;60561;60562;163519;163520;1635... 7727;60562;163524;178974 NaN NaN
A1L4H1 A1L4H1 A1L4H1 1 1 1 Soluble scavenger receptor cysteine-rich domai... SSC5D >sp|A1L4H1|SRCRL_HUMAN Soluble scavenger recep... 1 1 ... NaN 2 12914 True 13624 177453;177454 136581;136582 136581 NaN NaN
P63092 P63092;P04899;P08754;P63096;P09471;P38405;P190... P63092;P04899;P08754;P63096;P09471;P38405;P190... 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1;1 Guanine nucleotide-binding protein G(s) subuni... GNAS;GNAI2;GNAI3;GNAI1;GNAO1;GNAL;GNAT2;GNAT3;... >sp|P63092|GNAS2_HUMAN Guanine nucleotide-bind... 22 1 ... NaN 3 10218 True 10674 137064;137065;137066;137067;137068;137069;1370... 103921;103922;103923;103924;103925;103926;1039... 103922 NaN NaN
P04156-2 P04156-2;A2A2V1;P04156 P04156-2;A2A2V1;P04156 1;1;1 1;1;1 1;1;1 Major prion protein PRNP >sp|P04156-2|PRIO_HUMAN Isoform 2 of Major pri... 3 1 ... NaN 4 18253 True 19215 255016;255017;255018;255019;255020;255021;2550... 199375 199375 NaN NaN
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
Q9Y6B6 Q9Y6B6;Q9H029;D6RDB2;D6RD69 Q9Y6B6;Q9H029;D6RDB2;D6RD69;D6R9R5 3;2;2;2;1 1;1;1;1;1 1;1;1;1;1 GTP-binding protein SAR1b SAR1B;DKFZp434B2017 >sp|Q9Y6B6|SAR1B_HUMAN GTP-binding protein SAR... 5 3 ... NaN 1,960 11056;12671;14121 False;True;False 11564;13369;14873 148661;148662;148663;148664;148665;148666;1486... 112725;112726;112727;112728;112729;134047;148469 112729;134047;148469 NaN NaN
Q9Y6C2 Q9Y6C2 Q9Y6C2;H0Y7A0 3;1 3;1 3;1 EMILIN-1 EMILIN1 >sp|Q9Y6C2|EMIL1_HUMAN EMILIN-1 OS=Homo sapien... 2 3 ... NaN 1,961 1197;10660;18081 True;True;True 1266;11154;19032 16443;143347;143348;143349;143350;143351;14335... 12937;109132;197424;197425 12937;109132;197425 NaN NaN
Q9Y6D6 Q9Y6D6;Q9Y6D5;E5RJN9;E5RHL7;E5RIF2 Q9Y6D6;Q9Y6D5;E5RJN9;E5RHL7;E5RIF2 2;1;1;1;1 2;1;1;1;1 2;1;1;1;1 Brefeldin A-inhibited guanine nucleotide-excha... ARFGEF1;ARFGEF2 >sp|Q9Y6D6|BIG1_HUMAN Brefeldin A-inhibited gu... 5 2 ... NaN 1,962 16763;18735 True;True 17643;19717 233551;233552;233553;233554;233555;233556;2335... 182340;204240;204241;204242 182340;204240 NaN NaN
Q9Y6G9 Q9Y6G9;C9JGM7;E9PHI6 Q9Y6G9;C9JGM7;E9PHI6 2;1;1 2;1;1 2;1;1 Cytoplasmic dynein 1 light intermediate chain 1 DYNC1LI1 >sp|Q9Y6G9|DC1L1_HUMAN Cytoplasmic dynein 1 li... 3 2 ... NaN 1,963 571;3033 True;True 604;3175 8034;8035;8036;8037;8038;8039;8040;8041;8042;8... 6590;6591;6592;6593;6594;6595;6596;6597;30946 6594;30946 NaN NaN
Q9Y6I3 Q9Y6I3;Q9Y6I3-3;Q9Y6I3-1 Q9Y6I3;Q9Y6I3-3;Q9Y6I3-1 2;2;2 2;2;2 2;2;2 Epsin-1 EPN1 >sp|Q9Y6I3|EPN1_HUMAN Epsin-1 OS=Homo sapiens ... 3 2 ... NaN 1,964 1486;15701 True;True 1565;16529 20438;20439;20440;20441;20442;218668;218669;21... 15899;169643;169644;169645;169646;169647;16964... 15899;169647 NaN NaN

1870 rows × 196 columns

No we can get rid of the common part LFQ intensity and keep only the sample names

pgs.columns = pgs.columns.str.replace(stub_intensity, "").str.strip()
pgs.columns.name = "sample"
pgs
sample BAT_NE1 BAT_NE2 BAT_NE3 BAT_NE4 BAT_NE5 BAT_woNE1 BAT_woNE2 BAT_woNE3 BAT_woNE4 BAT_woNE5 WAT_NE1 WAT_NE2 WAT_NE3 WAT_NE4 WAT_NE5 WAT_woNE1 WAT_woNE2 WAT_woNE3 WAT_woNE4 WAT_woNE5
first_prot
Q13443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1,131,200
Q08209 0 0 10,454,000 0 8,308,300 0 0 7,068,900 0 5,833,600 0 0 0 0 0 0 13,239,000 0 0 10,794,000
A1L4H1 0 0 0 3,375,200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P63092 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8,852,600
P04156-2 0 0 0 0 0 0 0 0 0 0 0 0 0 8,068,200 0 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
Q9Y6B6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1,630,800 0 0 0 0 0
Q9Y6C2 0 0 0 0 0 0 0 0 0 0 0 0 4,651,500 0 0 0 0 0 0 0
Q9Y6D6 0 0 4,003,100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Q9Y6G9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9,301,900 0 0 9,676,800
Q9Y6I3 11,134,000 0 5,309,200 0 4,596,700 0 0 7,092,600 0 0 0 0 8,926,800 9,343,600 15,890,000 0 0 0 0 0

1870 rows × 20 columns

Parse metadata from column names#

The group could be defined in a sample metadata file, but here we just parse it from the sample names by omitting the numbers at the end of the sample name.

pgs.columns.str.replace(r"\d", "", regex=True)
Index(['BAT_NE', 'BAT_NE', 'BAT_NE', 'BAT_NE', 'BAT_NE', 'BAT_woNE',
       'BAT_woNE', 'BAT_woNE', 'BAT_woNE', 'BAT_woNE', 'WAT_NE', 'WAT_NE',
       'WAT_NE', 'WAT_NE', 'WAT_NE', 'WAT_woNE', 'WAT_woNE', 'WAT_woNE',
       'WAT_woNE', 'WAT_woNE'],
      dtype='object', name='sample')

We add to the information as a MultiIndex of group and sample name to the columns (sample metadata).

pgs.columns = pd.MultiIndex.from_arrays(
    [pgs.columns.str.replace(r"\d", "", regex=True), pgs.columns],
    names=["group", pgs.columns.name],
)
pgs
group BAT_NE BAT_woNE WAT_NE WAT_woNE
sample BAT_NE1 BAT_NE2 BAT_NE3 BAT_NE4 BAT_NE5 BAT_woNE1 BAT_woNE2 BAT_woNE3 BAT_woNE4 BAT_woNE5 WAT_NE1 WAT_NE2 WAT_NE3 WAT_NE4 WAT_NE5 WAT_woNE1 WAT_woNE2 WAT_woNE3 WAT_woNE4 WAT_woNE5
first_prot
Q13443 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1,131,200
Q08209 0 0 10,454,000 0 8,308,300 0 0 7,068,900 0 5,833,600 0 0 0 0 0 0 13,239,000 0 0 10,794,000
A1L4H1 0 0 0 3,375,200 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
P63092 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 8,852,600
P04156-2 0 0 0 0 0 0 0 0 0 0 0 0 0 8,068,200 0 0 0 0 0 0
... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ... ...
Q9Y6B6 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1,630,800 0 0 0 0 0
Q9Y6C2 0 0 0 0 0 0 0 0 0 0 0 0 4,651,500 0 0 0 0 0 0 0
Q9Y6D6 0 0 4,003,100 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
Q9Y6G9 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 9,301,900 0 0 9,676,800
Q9Y6I3 11,134,000 0 5,309,200 0 4,596,700 0 0 7,092,600 0 0 0 0 8,926,800 9,343,600 15,890,000 0 0 0 0 0

1870 rows × 20 columns

Long format and log2 transformation#

From here we can stack both levels, name the values intensity. If we reset the index we get the original CKG format.

pgs = pgs.stack([0, 1], future_stack=True).to_frame("intensity")
pgs
intensity
first_prot group sample
Q13443 BAT_NE BAT_NE1 0
BAT_NE2 0
BAT_NE3 0
BAT_NE4 0
BAT_NE5 0
... ... ... ...
Q9Y6I3 WAT_woNE WAT_woNE1 0
WAT_woNE2 0
WAT_woNE3 0
WAT_woNE4 0
WAT_woNE5 0

37400 rows × 1 columns

First we log2 transform the data. We first set the zeros to np.nan to avoid -inf values.

pgs = np.log2(pgs.replace(0.0, np.nan).dropna())
pgs
intensity
first_prot group sample
Q13443 WAT_woNE WAT_woNE5 20.109
Q08209 BAT_NE BAT_NE3 23.318
BAT_NE5 22.986
BAT_woNE BAT_woNE3 22.753
BAT_woNE5 22.476
... ... ... ...
Q9Y6I3 BAT_NE BAT_NE5 22.132
BAT_woNE BAT_woNE3 22.758
WAT_NE WAT_NE3 23.090
WAT_NE4 23.156
WAT_NE5 23.922

17489 rows × 1 columns

Data to be saved in the CKG format: Reset the index.

pgs.reset_index()
first_prot group sample intensity
0 Q13443 WAT_woNE WAT_woNE5 20.109
1 Q08209 BAT_NE BAT_NE3 23.318
2 Q08209 BAT_NE BAT_NE5 22.986
3 Q08209 BAT_woNE BAT_woNE3 22.753
4 Q08209 BAT_woNE BAT_woNE5 22.476
... ... ... ... ...
17,484 Q9Y6I3 BAT_NE BAT_NE5 22.132
17,485 Q9Y6I3 BAT_woNE BAT_woNE3 22.758
17,486 Q9Y6I3 WAT_NE WAT_NE3 23.090
17,487 Q9Y6I3 WAT_NE WAT_NE4 23.156
17,488 Q9Y6I3 WAT_NE WAT_NE5 23.922

17489 rows × 4 columns

Done.