我有以下 pd.DataFrame
df = pd.DataFrame({'admission_timestamp': ['2021-01-17 17:45:00', '2020-03-31 23:32:00', '2020-03-27 18:20:00', '2020-04-17 18:12:00', '2020-03-19 19:12:00'], 'end_period': ['2021-01-18 17:45:00', '2020-04-01 23:32:00', '2020-03-28 18:20:00', '2020-04-18 18:12:00', '2020-03-20 19:12:00'], 'start_med': ['NaT', '2020-04-01 00:00:00', '2020-03-27 19:00:00', '2020-04-17 18:39:24', 'NaT'], 'end_med': ['NaT', '2020-04-14 21:00:00', '2020-04-05 00:00:00', '2020-05-06 22:07:29', 'NaT']})
看起來像:
admission_timestamp end_period start_med end_med
1 2021-01-17 17:45:00 2021-01-18 17:45:00 NaT NaT
2 2020-03-31 23:32:00 2020-04-01 23:32:00 2020-04-01 00:00:00 2020-04-14 21:00:00
3 2020-03-27 18:20:00 2020-03-28 18:20:00 2020-03-27 19:00:00 2020-04-05 00:00:00
4 2020-04-17 18:12:00 2020-04-18 18:12:00 2020-04-17 18:39:24 2020-05-06 22:07:29
5 2020-03-19 19:12:00 2020-03-20 19:12:00 NaT NaT
我想創建一個新列received_medidation,說明患者是否(布林值)在admission_timestamp和之間接受藥物治療end_period(即使只有一秒鐘)。所以,如果有之間的任何時間布爾應說明admission_timestamp和end_period與之間的時間重疊start_med和end_med。dtypes 都是datetime64[ns]。
我知道我們可以創建布爾掩碼,例如
condition = (df['date'] > start_date) & (df['date'] <= end_date)
...但是我不明白這如何可能解決上述任務。任何幫助表示贊賞。
uj5u.com熱心網友回復:
利用 between
df['overlaps'] = df['start_med'].between(df['admission_timestamp'], df['end_period']) \
| df['end_med'].between(df['admission_timestamp'], df['end_period'])
print(df)
# Output
admission_timestamp end_period start_med end_med overlaps
1 2021-01-17 17:45:00 2021-01-18 17:45:00 NaT NaT False
2 2020-03-31 23:32:00 2020-04-01 23:32:00 2020-04-01 00:00:00 2020-04-14 21:00:00 True
3 2020-03-27 18:20:00 2020-03-28 18:20:00 2020-03-27 19:00:00 2020-04-05 00:00:00 True
4 2020-04-17 18:12:00 2020-04-18 18:12:00 2020-04-17 18:39:24 2020-05-06 22:07:29 True
5 2020-03-19 19:12:00 2020-03-20 19:12:00 NaT NaT False
uj5u.com熱心網友回復:
您可以應用一個檢查條件的函式(請注意,start_med日期在admission_timestamp和之間就足夠了end_period):
for col in df.columns:
df[col] = pd.to_datetime(df[col])
df['received_medidation'] = (df['admission_timestamp'] < df['start_med']) & (df['start_med'] < df['end_period'])
輸出:
admission_timestamp end_period start_med \
0 2021-01-17 17:45:00 2021-01-18 17:45:00 NaT
1 2020-03-31 23:32:00 2020-04-01 23:32:00 2020-04-01 00:00:00
2 2020-03-27 18:20:00 2020-03-28 18:20:00 2020-03-27 19:00:00
3 2020-04-17 18:12:00 2020-04-18 18:12:00 2020-04-17 18:39:24
4 2020-03-19 19:12:00 2020-03-20 19:12:00 NaT
end_med received_medidation
0 NaT False
1 2020-04-14 21:00:00 True
2 2020-04-05 00:00:00 True
3 2020-05-06 22:07:29 True
4 NaT False
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/406620.html
標籤:
下一篇:如何標記資料框組的最后一行?
