Как создать производный столбец в файле CSV, используя linux / python? - PullRequest
1 голос
/ 03 марта 2020

У меня есть файл 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

И я хочу новый столбец " Новый " на основе " Время"столбец, как объяснено ниже

Если моя отметка времени находится в диапазоне от 18:00 (18:00) до 6:00 (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

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Вы можете преобразовать вашу серию в Datetime и извлечь час. Затем сопоставьте его значениям

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
1 голос
/ 03 марта 2020

, если вы можете использовать pandas и numpy, выполните следующие действия, используя numpy .where и pandas .Series.dt.hour

df=pd.read_csv('filename.csv',parse_dates=['Time'])
df['New'] = np.where((df.Time.dt.hour > 5) & (df.Time.dt.hour <18),'Day','Night')

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

df.to_csv('New_filename.csv')
...