Добавление значений в столбец из словаря

#python #pandas #dictionary

#python #pandas #словарь

Вопрос:

У меня есть фрейм данных следующим образом:

 df = {'emp': [123, 234], 'state': ['AL', 'CA'], 'start_time': ['08:00', '08:00'], 'end_time': ['17:00', '17:00']
df.head()
emp|state|start_time|end_time
123|AL|11/05/2020 08:00|11/05/2020 17:00
234|CA|11/05/2020 08:00|11/05/2020 17:00
  

У меня также есть отдельный словарь следующим образом:

 START_ADJUST = {"AL": 0, "CA": 20}
  

Нужна функция python, которая для каждого состояния в df добавляет количество минут, которое является значением для этого ключа состояния в словаре, к значению военного времени в ‘start_time в dataframe.

Вот что я попробовал:

 df['prep_mins'] = df['state'].map(START_ADJUST)
df['start_time'] = pd.to_datetime(df['start_time'])   pd.to_timedelta(df['prep_mins'], unit = 'm')
  

Ожидаемый результат:

 emp|state|start_time|end_time
123|AL|11/05/2020 08:00|11/05/2020 17:00
234|CA|11/05/2020 08:20|11/05/2020 17:00
  

Результат, который я получаю:

 emp|state|start_time|end_time
123|AL|11/05/2020 08:00|11/05/2020 17:00
234|CA|11/05/2020 08:00|11/05/2020 17:00
  

Два Один вопросs:

  1. Как вы добавляете минуты к военному времени?

2) Как добавить значение словарного значения в столбец в каталоге данных?

Комментарии:

1. Фрейм данных не является словарем, хотя вы можете создать фрейм данных из словаря. Пожалуйста, обновите свой код, чтобы отразить проблему, с которой вы столкнулись. Кроме того, что вы пробовали сами? Что произошло? Чего вы ожидали?

2. Обновил мой вопрос и решил некоторые из них!

Ответ №1:

Вот один из подходов. Я добавил дату к исходным данным и изменил смещение по времени с 0 на 1, чтобы убедиться, что все корректировки будут применены.

 import pandas as pd

df = {'emp': [123, 234], 
      'state': ['AL', 'CA'], 
      'start_time': ['2020-11-05 08:00', '2020-11-05 08:00'], 
      'end_time':   ['2020-11-05 17:00', '2020-11-05 17:00'],
     }
# create data frame
df = pd.DataFrame(data=df)

# convert data type
df['start_time'] = pd.to_datetime(df['start_time'])
df['end_time'] = pd.to_datetime(df['end_time'])

# original adjustments
start_adjust = {"AL": 1, "CA": 20}

# convert data type
start_adjust = {
    key: pd.to_timedelta(value, unit='minute')
    for key, value in start_adjust.items()
}

# apply adjustment
df['start_time']  = df.apply(lambda x: start_adjust[x['state']], axis=1)

# results
print(df)

   emp state          start_time            end_time
0  123    AL 2020-11-05 08:01:00 2020-11-05 17:00:00
1  234    CA 2020-11-05 08:20:00 2020-11-05 17:00:00
  

Комментарии:

1. Попробовал это на моей стороне, и это сработало! Спасибо!