Как добавить новый столбец в середине фрейма данных со значениями на основе предыдущего столбца? - PullRequest
1 голос
/ 29 мая 2020

Итак, я новичок в python и pandas. У меня есть фрейм данных, который выглядит следующим образом: enter image description here

Итак, после столбца Дата и Время создания я хочу добавить еще три столбца «Время создания дня», «Создание День недели »,« Месяц создания », которые основаны на значениях даты и времени в столбце« Дата и время создания ».

Например, «Время создания дня» может содержать такие значения, как «Утро», «Вечер» и т. Д. c, в зависимости от времени. «Creation Day of Week» будет содержать такие значения, как «понедельник», «вторник» и т. Д. c. а «Месяц создания» будет содержать такие значения, как «Январь», «Февраль» и т. д. c. Как мне это сделать?

1 Ответ

1 голос
/ 29 мая 2020

Используйте:

df = pd.DataFrame({
        'A':list('abcdef'),
         'B':[4,5,4,5,5,4],
         'Creation Date-Time':pd.date_range('2015-01-02 15:07:01',periods=6,freq='231H')
                                 .strftime('%Y-%m-%dT%H:%M:%S'),
         'D':[1,3,5,7,1,0],
         'E':[5,3,6,9,2,4],
         'F':list('aaabbb')
})
print (df)
   A  B   Creation Date-Time  D  E  F
0  a  4  2015-01-02T15:07:01  1  5  a
1  b  5  2015-01-12T06:07:01  3  3  a
2  c  4  2015-01-21T21:07:01  5  6  a
3  d  5  2015-01-31T12:07:01  7  9  b
4  e  5  2015-02-10T03:07:01  1  2  b
5  f  4  2015-02-19T18:07:01  0  4  b

Сначала используйте to_datetime для времени, затем получите позицию столбца Creation Date-Time по Index.get_loc, что используется для указания позиций новых столбцов, созданных DataFrame.insert. Для категорий используйте cut, для названий дней и месяцев используется Series.dt.day_name и Series.dt.month_name:

df['Creation Date-Time'] = pd.to_datetime(df['Creation Date-Time'])

idx = df.columns.get_loc('Creation Date-Time')

#https://stackoverflow.com/a/55571425/2901002
b = [0,4,8,12,16,20,24]
l = ['Late Night', 'Early Morning','Morning','Noon','Eve','Night']
s = pd.cut(df['Creation Date-Time'].dt.hour, bins=b, labels=l)

df.insert(idx + 1, 'Creation Time of Day', s)
df.insert(idx + 2, 'Creation Time of Week', df['Creation Date-Time'].dt.day_name())
df.insert(idx + 3, 'Creation Month', df['Creation Date-Time'].dt.month_name())
print (df)

   A  B  Creation Date-Time Creation Time of Day Creation Time of Week  \
0  a  4 2015-01-02 15:07:01                 Noon                Friday   
1  b  5 2015-01-12 06:07:01        Early Morning                Monday   
2  c  4 2015-01-21 21:07:01                Night             Wednesday   
3  d  5 2015-01-31 12:07:01              Morning              Saturday   
4  e  5 2015-02-10 03:07:01           Late Night               Tuesday   
5  f  4 2015-02-19 18:07:01                  Eve              Thursday   

  Creation Month  D  E  F  
0        January  1  5  a  
1        January  3  3  a  
2        January  5  6  a  
3        January  7  9  b  
4       February  1  2  b  
5       February  0  4  b  
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...