【发布时间】:2021-07-28 16:24:03
【问题描述】:
我有一个数据框,下面给出了它的 sn-p。
data = {'ID':['A', 'A', 'A', 'A', 'B', 'B', 'B', '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。研究日列是从开始天到结束天的天数,按顺序递增。
如果有多行具有相同的日期,则必须将这些行与具有相同先前数据的新列一起保留,如图所示。
我尝试了一些东西,但我已经坚持了一段时间了。非常感谢任何帮助。
我想出了下面给出的代码。这将获得“Missing_Date”和“Studyday”。但是,如果有多个条目具有相同的日期,则不会显示。
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)
谢谢。
【问题讨论】:
-
请分享您的尝试。
-
@RJAdriaansen 我已经更新了我的工作。
-
您确实在第 0 行和第 1 行中重复了 ID 和日期吗?
-
@HenryYik 是的。这就是我现在遇到的问题。其他一切都适用于最后给出的代码。
标签: python-3.x pandas dataframe data-analysis data-preprocessing