【发布时间】:2018-08-09 17:14:38
【问题描述】:
假设我有这个数据框。
import pandas as pd
data = {"Date": ["2018-08-05", "2018-08-05", "2018-08-05", "2018-08-05", "2018-08-06"],
"Time_End":["2018-08-05 13:50:00", "2018-08-05 14:26:00", "2018-08-05 17:30:00", "2018-08-05 17:10:00", "2018-08-06 11:23:00"],
"Reason":["blah1", "blah2", "blah3", "blah4", "blah5"]
}
df = pd.DataFrame.from_dict(data)
df
Date Time_End Reason
0 2018-08-05 2018-08-05 13:50:00 blah1
1 2018-08-05 2018-08-05 14:26:00 blah2
2 2018-08-05 2018-08-05 17:30:00 blah3
3 2018-08-05 2018-08-05 17:10:00 blah4
4 2018-08-06 2018-08-06 11:23:00 blah5
我只想将“Time_End”中的日期提取到名为“Birth_date”的新列中。但是,我还想检查时间是否超过 17:00。如果是这样,则提取的日期将加一成为第二天。下面显示了所需的输出。
Date Birth_date Time_End Reason
0 2018-08-05 2018-08-05 2018-08-05 13:50:00 blah1
1 2018-08-05 2018-08-05 2018-08-05 14:26:00 blah2
2 2018-08-05 2018-08-06 2018-08-05 17:30:00 blah3
3 2018-08-05 2018-08-06 2018-08-05 17:10:00 blah4
4 2018-08-06 2018-08-06 2018-08-06 11:23:00 blah5
我想出了这个,但它没有按我预期的方式工作。
df["after_17"] = df["Time_End"].dt.hour > 17
df["birth_date"] = df["after_17"].map(lambda x: df["Time_End"].dt.date if x else df["Time_End"].dt.date + pd.DateOffset(1))
它将输出连接在一起并形成一行。如何让它正常工作?我也愿意接受其他类型的解决方案。
【问题讨论】: