2013-11-15 30 views
1

我有一个多指标大熊猫数据框如下:值插入大熊猫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,然后我因子评分,我可以用一个lambda功能和地图功能的迭代器增加了。

这对我来说效果不好。

为了达到这个目的,我们将非常感谢您在正确的方向上采取的一般行动。 谢谢。

回答

1

使用具有重复值的索引不是一个好主意。如果您不针对您的DataFrame对象调用.set_index("index")对象,请使用以下解决方案。

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