2016-03-11 2 views
1

У меня есть кадр данных, который имеет данные в форматепанды - с данными о реструктуризации в кадре данных

времени | имя | стоимость


01.01.1970 | A | 1
01.02.1970 | A | 2
01.03.1970 | A | 1
01.01.1970 | B | 5
01.02.1970 | B | 3

Я что изменить эти данные что-то вроде

времени | A | B


01.01.1970 | 1 | 5
01.02.1970 | 2 | 3
01.03.1970 | 1 | NA

Как я могу достичь этого в пандах? Я попробовал groupby на dataframe, а затем присоединился, но он вышел правильно. заранее спасибо

ответ

1

Используйте DataFrame.pivot (doc):

import numpy as np 

df = pd.DataFrame(
    {'name': ['A', 'A', 'A', 'B', 'B'], 
    'time': ['01/01/1970', '02/01/1970', '03/01/1970', '01/01/1970', '02/01/1970'], 
    'value': [1, 2, 1, 5, 3]}) 

print(df.pivot(index='time', columns='name', values='value')) 

дает

  A B 
time    
01/01/1970 1 5 
02/01/1970 2 3 
03/01/1970 1 NaN 

Обратите внимание, что time теперь индекс. Если вы хотите, чтобы сделать его столбец, вызовите reset_index():

df.pivot(index='time', columns='name', values='value').reset_index() 
# name  time A B 
# 0  01/01/1970 1 5 
# 1  02/01/1970 2 3 
# 2  03/01/1970 1 NaN 
+0

Благодарит миллион ... отвечаешь решил мою проблему! –

0

Используйте функцию .pivot:

df = pd.DataFrame({'time' : [0,1,2,3], 
'name': ['A','A', 'B', 'B'], 'value': [10,20,30,40]}) 

df.pivot(index = 'time', columns = 'name', values = 'value')