python - 如何使用 linux/python 在 CSV 文件中创建派生列?
问题描述
我有一个包含以下列的 CSV(示例)文件
PC_name,Time,Plant,Section,PC_value
35901052,2017-08-01 05:50,MIYAKONOJO,MIYAKONOJO_05,0.000
35901052,2017-08-01 05:51,MIYAKONOJO,MIYAKONOJO_05,0.000
35901052,2017-08-01 05:56,MIYAKONOJO,MIYAKONOJO_05,0.000
35901052,2017-08-01 06:01,MIYAKONOJO,MIYAKONOJO_05,0.000
35901052,2017-08-01 06:06,MIYAKONOJO,MIYAKONOJO_05,0.000
我想要一个基于“时间”列的新列“新” ,如下所述
如果我的时间戳介于下午 6 点(18:00)到早上 6 点(06:00)之间,则该值应为“夜间”,否则为“日”
样本输出:
PC_name,Time,Plant,Section,PC_value,New
35901052,2017-08-01 05:50,MIYAKONOJO,MIYAKONOJO_05,0.000,Night
35901052,2017-08-01 05:51,MIYAKONOJO,MIYAKONOJO_05,0.000,Night
35901052,2017-08-01 05:56,MIYAKONOJO,MIYAKONOJO_05,0.000,Night
35901052,2017-08-01 06:01,MIYAKONOJO,MIYAKONOJO_05,0.000,Day
35901052,2017-08-01 06:06,MIYAKONOJO,MIYAKONOJO_05,0.000,Day
解决方案
您可以将您的系列转换为日期时间并提取小时。然后将其映射到值
df["Time"] = pd.to_datetime(df["Time"])
df["New"] = df["Time"].dt.hour.map({hour: "Night" if 18 < hour or hour < 6 else "Day" for hour in range(23)})
输出:
>>> df
PC_name Time Plant Section PC_value New
0 35901052 2017-08-01 05:50:00 MIYAKONOJO MIYAKONOJO_05 0.0 Night
1 35901052 2017-08-01 05:51:00 MIYAKONOJO MIYAKONOJO_05 0.0 Night
2 35901052 2017-08-01 05:56:00 MIYAKONOJO MIYAKONOJO_05 0.0 Night
3 35901052 2017-08-01 06:01:00 MIYAKONOJO MIYAKONOJO_05 0.0 Day
4 35901052 2017-08-01 06:06:00 MIYAKONOJO MIYAKONOJO_05 0.0 Day
推荐阅读
- javascript - 一个 3 字节宽的 UTF-8 字符如何只使用一个 UTF-16 代码单元?
- php - php get_meta_tags 没有得到结果(帮助)
- javascript - 我找不到小错误:Invalid shorthand property initializer 等
- python - 如何在由 pandas DataFrame 制作的 matplotlib pyplot 中显示精确值?
- javascript - 在网格布局中单击时突出显示图像并将其置于前面
- xslt - 平面数据库记录到父子 XML 转换
- windows - Get-AD 计算机与文本文件内容不匹配
- mysql - 如何在 MySQL 上将 TLS 版本升级到 1.2
- javascript - 有没有办法缩短定义 v-model 数据、Vue.js 和 Laravel
- mongodb - mongodb $lookup 返回空数组