2015-11-05 6 views
2

У меня есть dataframe, который выглядит какпереиндексации (переназначение) значение столбца

groupID  date_time   value  member  Session 
    23  2013-10-09 09:00:00 664639 Jerome  2607 
    23  2013-10-09 09:05:00 197290 Hence   2608 
    35  2013-10-09 09:10:00 470186  Ann   2608 
    35  2013-10-09 09:15:00 181314 Mikka   2608 
    35  2013-10-09 09:20:00 969427 Cristy   2609 
    37  2013-10-09 09:25:00 261473 James   2609 
    37  2013-10-09 09:30:00 3698  Oliver  2609 

Таким образом, цель я хотел бы, что вместо 2607 я имею 1, вместо 2608 меня 2 и т.д., то есть, чтобы сделать вид переиндексации или возможно отображение

 groupID  date_time   value  member  Session 
     23  2013-10-09 09:00:00 664639 Jerome  1 
     23  2013-10-09 09:05:00 197290 Hence   2 
     35  2013-10-09 09:10:00 470186  Ann   2 
     35  2013-10-09 09:15:00 181314 Mikka   2 
     35  2013-10-09 09:20:00 969427 Cristy   3 
     37  2013-10-09 09:25:00 261473 James   3 
     37  2013-10-09 09:30:00 3698  Oliver  3 

поиск на reindexing не дали желаемых результатов, так что ваши советы будут оценены

ответ

1

IIUC вы можете просто сделать:

df['Session'] -= 2606 

Видя, как это выглядит, как ваши ценности увеличиваются в позитивном ключе.

Или вы могли бы определить Dict и переназначить

session_vals = df['Session'].unique() 
d = dict(zip(session_vals, np.arange(1, len(session_vals) + 1))) 

df['Session'] = df['Session'].map(d) 

Другой способ заключается в использовании pd.factorize

In [233]: 
df['Session'] = pd.factorize(df['Session'])[0] + 1 
df 

Out[233]: 
    groupID   date_time value member Session 
0  23 2013-10-09 09:00:00 664639 Jerome  1 
1  23 2013-10-09 09:05:00 197290 Hence  2 
2  35 2013-10-09 09:10:00 470186  Ann  2 
3  35 2013-10-09 09:15:00 181314 Mikka  2 
4  35 2013-10-09 09:20:00 969427 Cristy  3 
5  37 2013-10-09 09:25:00 261473 James  3 
6  37 2013-10-09 09:30:00 3698 Oliver  3 
+0

, чем ks, EdChum, он работает! Кстати, может быть, вы могли бы рассмотреть этот вопрос (особенно потому, что он использует предложенный вами метод раньше, но имеет проблемы на объектах '' 'groupby''! http://stackoverflow.com/questions/33541280/apply-and-transform -dont-work-for-groupby-object? noredirect = 1 # comment54863991_33541280 –

0

Попробуйте это:

df['Session'] = np.unique(df['Session'], return_inverse=True)[1] 

уникальных сессий будут пронумерованы, начиная с 0 .

+0

странно запускает сеансы с '' '3''' –

+1

возможно, первый сеанс в вашем столбце -' '3'', но наименьшее число в столбец будет '' 0''. Уникальные метки будут в отсортированном порядке входов. – jakevdp

+0

Может быть, добавить 1, чтобы соответствовать желаемому выходу 'np.unique (df ['Session'], return_inverse = True) [1 ] + 1' –

Смежные вопросы