1

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

这对我来说效果不佳。

非常感谢您朝着正确的方向迈进。谢谢。

4

1 回答 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)
于 2013-11-15T03:03:41.793 回答