How to pivot pandas dataframe?
1
0
Entering edit mode
5.6 years ago

Given a dataframe:

 Sample_Name SNP1 SNP2 SNP3
 Sample 1 AA AC GC
 Sample 2 GA AC CG
 Sample 3 AA AA GG

How do I get:

 Sample_Name SNP Value
 Sample 1 SNP1 AA
 Sample 1 SNP2 AC
 Sample 1 SNP3 GC
 Sample 2 SNP1 GA
 Sample 2 SNP2 AC
 Sample 2 SNP3 CG
 ...

I'm a beginner and I've been trying to find a way to do this but none of the options I've tried have been successful. Thanks to anyone who could help!

pandas dataframe python pivot • 1.3k views
ADD COMMENT
2
Entering edit mode

Minor point: You're unpivoting the data (going from wide-form to long-form), not pivoting it.

ADD REPLY
1
Entering edit mode
5.6 years ago

Like this?

import pandas as pd

df = pd.DataFrame(
    [["AA", "AC", "GC"], ["GA", "AC", "CG"], ["AA", "AA", "GG"]],
    index=["Sample 1", "Sample 2", "Sample 3"],
    columns=["SNP1", "SNP2", "SNP3"],
)

print(df.stack())

Output:

Sample 1  SNP1    AA
          SNP2    AC
          SNP3    GC
Sample 2  SNP1    GA
          SNP2    AC
          SNP3    CG
Sample 3  SNP1    AA
          SNP2    AA
          SNP3    GG
dtype: object
ADD COMMENT
0
Entering edit mode

Once you have this object, how can you subset / filter to find, say, all samples with SNP1 'AA'?

ADD REPLY
1
Entering edit mode

For this task there is no need to convert it. You can use:

df.index[df['SNP1'].str.match('AA')].tolist()
ADD REPLY

Login before adding your answer.

Traffic: 1677 users visited in the last hour
Help About
FAQ
Access RSS
API
Stats

Use of this site constitutes acceptance of our User Agreement and Privacy Policy.

Powered by the version 2.3.6