2016-04-26 61 views
3

我有这样的数据帧的:Python的变换数组

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 

我想改变这样的:

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 

我怎样才能做这样的穿越 - 在用Python熊猫或numpy的? 感谢您的帮助

+0

什么是转换规则? – 2016-04-26 14:46:16

+0

如果值<3,它将进入变量1,否则进入变量2 –

回答

4

我认为你需要pivotrename_axis(新中pandas0.18.0)和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 

样品:

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 
+0

非常感谢jezrael。我认为这是我需要的! –

+0

超级,首先我认为你需要一些特殊的转换规则;) – jezrael

+0

好像什么?你能给我一个例子吗? –

0

作为一种补充,一种方式来分割根据条件列:

df=pd.DataFrame({'Variable':arange(5)},index=pd.date_range('2016/4/26',periods=5)) 
""" 
      Variable 
2016-04-26   0 
2016-04-27   1 
2016-04-28   2 
2016-04-29   3 
2016-04-30   4 
""" 

cond=df<3 
df[cond].join(df[~cond],lsuffix=1,rsuffix=2)  
""" 
      Variable1 Variable2 
2016-04-26  0.0  NaN 
2016-04-27  1.0  NaN 
2016-04-28  2.0  NaN 
2016-04-29  NaN  3.0 
2016-04-30  NaN  4.0 
"""