2013-11-15 2 views
1

У меня есть мультииндексная панда DataFrame следующим образом:Вставка значения в панд datafrmae на основе мультииндексного

df = pandas.DataFrame({"index": ["a", "a", "a", "b", "b", "b"], "id": [1,2,3,4,5,6], "name": ["jim", "jim", "jim", "bob", "bob", "bob"], "date":['12/5/1999','12/6/1999','18/4/2000','12/4/2006','14/9/2007','16/4/2008']}).set_index("index") 

Он представляет человек буксировать, какие события происходили в разное время. Я хочу добавить новый столбец date_order, который последовательно увеличивает новое значение для каждой строки в каждом индексе в соответствии с датой, когда произошло событие. каждое событие произошло. То есть каждый человек будет иметь значение даты, назначенное в том порядке, в котором произошло событие, начиная с 1 и увеличиваясь на каждом старшем событии.

Это то, что я хочу в конечном итоге.

index id name date  date_order 
a  1 jim  12/5/1999 3 
a  2 jim  12/6/1999 2 
a  3 jim  18/4/2000 1 
b  4 bob  12/4/2006 3 
b  5 bob  14/9/2007 2 
b  6 bob  16/4/2008 1 

Я начал путем добавления колонки date_order это data['date_order'] = 1, а затем я учил я мог бы увеличить сверх с итератором с помощью функции лямбды и функцию карты.

Это не сработало для меня.

Общий удар в правильном направлении, чтобы сделать это, будет очень признателен. Спасибо.

ответ

1

Не рекомендуется использовать индекс с повторяющимися значениями. Вот решение, если вы не вызываете .set_index("index") для вашего объекта DataFrame.

import pandas as pd 
df = pd.DataFrame({"index": ["a", "a", "a", "b", "b", "b"], "id": [1,2,3,4,5,6], "name": ["jim", "jim", "jim", "bob", "bob", "bob"], "date":['12/5/1999','12/6/1999','18/4/2000','12/4/2006','14/9/2007','16/4/2008']}) 
df["date_order"] = df.groupby(df["index"]).date.transform(pd.Series.rank, ascending=False) 
+0

Отлично. Благодарю. – John

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