Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Python Transform an array

I have this kind of dataframe :

    Variable   Date     Value
0  Variable1  Date1  Valeur 1
1  Variable1  Date2  Valeur 2
2  Variable1  Date3  Valeur 3
3  Variable2  Date4  Valeur 4
4  Variable2  Date5  Valeur 5

I would like to transform it like this :

    Date Variable1 Variable2
0  Date1  Valeur 1      None
1  Date2  Valeur 2      None
2  Date3  Valeur 3      None
3  Date4      None  Valeur 4
4  Date5      None  Valeur 5

How can I do this kind of tranformation in Python with panda or numpy? Thanks for your help

like image 525
vincent vorreiter Avatar asked May 25 '26 01:05

vincent vorreiter


1 Answers

I think you need pivot with rename_axis (new in pandas 0.18.0) and reset_index:

print df.pivot(index='Date', columns='Variable', values='Value')
        .rename_axis(None, axis=1)
        .reset_index()

    Date Variable1 Variable2
0  Date1  Valeur 1      None
1  Date2  Valeur 2      None
2  Date3  Valeur 3      None
3  Date4      None  Valeur 4
4  Date5      None  Valeur 5

Sample:

import pandas as pd

df = pd.DataFrame({'Variable': {0: 'a', 1: 'a', 2: 'a', 3: 'b', 4: 'b'}, 
                    'Date': {0: pd.Timestamp('2016-02-05 00:00:00'), 
                             1: pd.Timestamp('2016-02-06 00:00:00'),
                             2: pd.Timestamp('2016-02-07 00:00:00'), 
                             3: pd.Timestamp('2016-02-08 00:00:00'), 
                             4: pd.Timestamp('2016-02-09 00:00:00')}, 
                    'Value': {0: 1, 1: 2, 2: 3, 3: 4, 4: 5}},
                    columns=['Variable','Date','Value'])

print df
  Variable       Date  Value
0        a 2016-02-05      1
1        a 2016-02-06      2
2        a 2016-02-07      3
3        b 2016-02-08      4
4        b 2016-02-09      5

print df.pivot(index='Date', columns='Variable', values='Value')
        .rename_axis(None, axis=1)
        .reset_index()

        Date    a    b
0 2016-02-05  1.0  NaN
1 2016-02-06  2.0  NaN
2 2016-02-07  3.0  NaN
3 2016-02-08  NaN  4.0
4 2016-02-09  NaN  5.0
like image 163
jezrael Avatar answered May 26 '26 14:05

jezrael