我应该如何多次分配二进制虚拟变量?
Posted
技术标签:
【中文标题】我应该如何多次分配二进制虚拟变量?【英文标题】:How should I go about assigning a binary dummy variable for a bunch of times? 【发布时间】:2014-07-02 14:00:52 【问题描述】:我有两个电子表格。其中之一是大约 20000 排病人进入急诊室。每行都有一个日期/时间列,以及单独的日期和单独的时间列。显然,多个患者在同一天进入。另一个电子表格包含第一个电子表格中包含的每天 366 个日出和日落的日期和时间。
我想做的是在第一个电子表格中创建一个名为“is_night”的列,如果是白天,则将每个条目编码为 0(即患者输入的时间大于日出时间且小于日出时间)日落对应于患者进入的日期),如果是夜间则为 1(“其他”条件)
最简单的方法是什么?在 Excel 中进行时间比较是一件痛苦的事情,而 Python 给我带来了解析问题。请注意,我可以访问 Python 3(带有 Pandas)、R、Excel 和 Access。谢谢!
编辑:这是每个电子表格的列标题:
Patient Data: row_id day_of_week date_in time_in date_out time_out complaint mdassigned acuity_id elapsed_time triage disp_desc adm_dec adm_delay diagnosis icd date_time_in date_time_out
Sun Data: day_number sunrise_time sunset_time season month day year is_dst sunrise_time_dst sunset_time_dst date sunrise_date_time sunset_date_time sunrise_date_time_dst sunset_date_time_dst
【问题讨论】:
从患者档案中获取日期/时间信息,在天文档案中查找日期,将患者时间与日出日落时间进行比较。 谢谢!但是我将如何在 Excel 单元格中编码,然后我可以为 366 个日期中的每个日期应用每个单元格? 我有一些 Python 代码可以相当准确地计算给定地理坐标(经度和纬度)的特定位置的日出和日落时间,这听起来可能很有用。当前代码源自我多年前在网络上找到的更旧的公共域代码,如果您有兴趣,我想我已经将它发布在某个地方的答案中。如果您想了解更多信息,请使用 LMK。 那可能很好,谢谢!我从海军的网站上得到了我的数据。它是文本格式,所以我将其保存为 .txt 并将其导入 Excel 电子表格。然后我根据原始数据集的日期范围将其分成日期和时间。 pnuts,我正在用每个电子表格的列标题更新我的原始帖子。 我曾经从海军网站数据中做类似的事情,但现在在代码中动态计算它。这是一个指向my answer 的链接,指向标题为javascript or Python - How do I figure out if it's night or day?的问题 【参考方案1】:您可以使用 pandas,并尝试类似的方法。不知道你的变量和细节,但是下面显示的代码应该是可以理解的,你可以根据你的具体情况进行调整
# dates_df is a file with dates and sunrise and sunset times
# patiets_df is a file with patiens data
def get_sunrise(x):
sunrise = dates_df[dates_df['date'] = x['date']].sunrise_time
return sunrise
def get_sunset(x):
sunset = dates_df[dates_df['date'] = x['date']].sunset_time
return sunset
# add columns for sunrise and sunset to patients_df
patients_df['sunrise']=patients_df.apply(get_sunrise, axis = 1)
patients_df['sunset']=patients_df.apply(get_sunset, axis = 1)
# checking every admission time from patients_df if it is after sunset and before sunrise
patients_df['is_night'] = patients_df.apply(lambda x: x.time < x.sunrise and x.time > x.sunset, axis=1)
【讨论】:
这实际上看起来非常好,但我认为代码编译不正确。但这就是我想要做的。顺便说一句,你能像 Python 那样在一行中有多个赋值语句吗? 我没有测试过,因为我没有你的数据:(它可能不起作用,这是真的;)如果可以的话,请在你的问题中包含示例数据。【参考方案2】:我想通了。我将这两个表都加载到 Access 中,根据日期进行了联接,然后在 Excel 中编写了一个快速 if 语句并且它工作了。
【讨论】:
不错,这个主意不错,我也考虑过使用 pandas 加入日期 :)以上是关于我应该如何多次分配二进制虚拟变量?的主要内容,如果未能解决你的问题,请参考以下文章