的Python-熊猫-基于updated_at列创建一列valid_until

时间:2020-02-08 15:02:47

标签: python pandas

我有一个包含indexperson_idupdated_at列的数据。我想基于available列派生一个具有valid_untillupdated_at的新数据框。基本上,person_id可以重复,并且只有每个person_id的最后更新的行中的valid_untill为空。

原始数据:

所需的输出:

任何想法我该怎么做?

id = [1,2,1,1] Updated_at = ['12/31/2019','12/30/2019','01/15/2020','01/20/2020']

dict = {'id':id,'updated_at':updated_at}

df = pd.DataFrame(dict)

1 个答案:

答案 0 :(得分:1)

这应该可以解决问题(尽管-请不要将您的专栏称为index-这会使事情复杂化)

df["updated_at"]=pd.to_datetime(df["updated_at"])

df2=df.reset_index().merge(df.reset_index(), on="person_id", suffixes=["_x", "_y"])
df2["match"]=np.logical_and(df2["index_x"].lt(df2["index_y"]), df2["updated_at_x"].lt(df2["updated_at_y"]))
df["valid_until"]=df2.loc[df2["match"]].groupby("index_x")["updated_at_y"].first()

输出:

   person_id updated_at valid_until
0          1 2019-12-31  2020-01-15
1          2 2019-12-30         NaT
2          1 2020-01-15  2020-01-20
3          1 2020-01-20         NaT

输入数据

df=pd.DataFrame({"person_id": [1,2,1,1], "updated_at": "12/31/2019 12/30/2019 01/15/2020 01/20/2020".split(" ")})