我有一个MultiIndex pandas DataFrame,如下所示:
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函数和map函数使用迭代器增加。
这对我来说效果不佳。
为了做到这一点,正确的方向将会非常感激。 感谢。
答案 0 :(得分: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)