Как создать новый столбец с условной датой и временем, используя панд - PullRequest
0 голосов
/ 29 января 2019

Я пытаюсь добавить новый столбец, содержащий метку с этим условием:

  • Метка 1, если время разницы между значением в 'time' и dt <2 часа </li>
  • Метка 0для другого случая

Моя текущая идея:

df = pd.read_csv('./datetimecek.csv')
df['time'] = pd.to_datetime(df['datetime'])

dt = datetime.strptime("19/02/18 19:00", "%d/%m/%y %H:%M")

datetime            time
2018/02/19 16:00    2018-02-19 16:00:00
2018/02/19 17:00    2018-02-19 17:00:00
2018/02/19 18:00    2018-02-19 18:00:00
2018/02/19 19:00    2018-02-19 19:00:00

А потом я определил timedelta

a = timedelta(hours=2)

def label(c):
if dt - df['time'] < a:
    return '1'
else:
    return '0'

затем

df['label'] = df.apply(label, axis=1)

НоЯ получил ошибку: «Истинная ценность Серии неоднозначна.Используйте a.empty, a.bool () ...

Можно ли как-нибудь это исправить?

1 Ответ

0 голосов
/ 29 января 2019

Если хотите установить строки 0 и 1:

df['label'] = np.where(dt - df['time'] < a, '1','0')

Или альтернативно @Dark:

df['label'] = (dt - df['time'] < a).astype(int).astype(str)
print (df)
           datetime                time label
0  2018/02/19 16:00 2018-02-19 16:00:00     0
1  2018/02/19 17:00 2018-02-19 17:00:00     0
2  2018/02/19 18:00 2018-02-19 18:00:00     1
3  2018/02/19 19:00 2018-02-19 19:00:00     1

print (type(df.loc[0, 'label']))
<class 'str'>

Если хотите установить целые числа 0 и 1:

df['label'] = (dt - df['time'] < a).astype(int)

Альтернатива:

df['label'] = np.where(dt - df['time'] < a, 1,0)
print (df)
           datetime                time label
0  2018/02/19 16:00 2018-02-19 16:00:00     0
1  2018/02/19 17:00 2018-02-19 17:00:00     0
2  2018/02/19 18:00 2018-02-19 18:00:00     1
3  2018/02/19 19:00 2018-02-19 19:00:00     1

print (type(df.loc[0, 'label']))
<class 'numpy.int32'>

Можно ли как-нибудь это исправить?

Да, нужно изменить df на c для работы со скалярами:

def label(c):
    if dt - c['time'] < a:
        return '1'
    else:
        return '0'
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...