我有一个包含index
,person_id
和updated_at
列的数据。我想基于available
列派生一个具有valid_untill
和updated_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)
答案 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(" ")})