Python 基于多索引将值插入数据FRMAE
我有一个多索引数据框,如下所示:Python 基于多索引将值插入数据FRMAE,python,pandas,Python,Pandas,我有一个多索引数据框,如下所示: 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("in
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\u 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\u order列thisdata['date\u order']=1
,然后我想我可以使用一个使用lambda函数和map函数的迭代器来递增
这对我来说不太合适
如果能朝着正确的方向踢一脚,我们将不胜感激。
谢谢。使用具有重复值的索引不是一个好主意。如果您不调用
。请为DataFrame
对象设置索引(“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)
使用具有重复值的索引不是一个好主意。如果您不调用
。请为DataFrame
对象设置索引(“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)