如何解决根据数据框中的其他列值创建新列值
我有一个数据框,下面给出了它的一个片段。
data = {'ID':['A','A','A,'B','C','C'],'Date':['03/25/2021','03/25/2021',03/27/2021','03/29/2021','03/10/2021','03/11/2021','03/15/2021','03/16/2021','03/21/2021','03/25/2021']}
df = pd.DataFrame(data)
我正在寻找一个看起来像这样的最终结果。
说明:对于每个ID,study_date从开始日期开始到最后一个日期结束。中间缺少的日期必须填写。如果原始数据框中缺少日期,则“missing_date”列的值为 1 或 0。学习日列是从开始天数到结束天数按顺序递增的天数。
我尝试了一些东西,但我已经坚持了一段时间了。任何帮助是极大的赞赏。 谢谢。
解决方法
试试:
def fn(x):
dr = pd.date_range(x["Date"].min(),x["Date"].max())
out = pd.DataFrame({"Date": dr},index=range(1,len(dr) + 1))
out["Missing_Date"] = (~out["Date"].isin(x["Date"])).astype(int)
return out
# if the "Date" column is not converted:
df["Date"] = pd.to_datetime(df["Date"])
x = (
df.groupby("ID")
.apply(fn)
.reset_index()
.rename(columns={"level_1": "StudyDay"})
)
print(x)
打印:
ID StudyDay Date Missing_Date
0 A 1 2021-03-25 0
1 A 2 2021-03-26 1
2 A 3 2021-03-27 0
3 A 4 2021-03-28 1
4 A 5 2021-03-29 0
5 B 1 2021-03-10 0
6 B 2 2021-03-11 0
7 B 3 2021-03-12 1
8 B 4 2021-03-13 1
9 B 5 2021-03-14 1
10 B 6 2021-03-15 0
11 B 7 2021-03-16 0
12 C 1 2021-03-21 0
13 C 2 2021-03-22 1
14 C 3 2021-03-23 1
15 C 4 2021-03-24 1
16 C 5 2021-03-25 0
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。