根据MUltiIndex将值插入到pandas数据帧中

时间:2013-11-15 02:08:42

标签: python pandas

我有一个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函数使用迭代器增加。

这对我来说效果不佳。

为了做到这一点,正确的方向将会非常感激。 感谢。

1 个答案:

答案 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)