Я хочу вычесть даты в «A» из дат в «B» и добавить новый столбец с разницей.
df
A B
one 2014-01-01 2014-02-28
two 2014-02-03 2014-03-01
Я пробовал следующее, но получаю сообщение об ошибке, когда пытаюсь включить это в цикл for ...
import datetime
date1=df['A'][0]
date2=df['B'][0]
mdate1 = datetime.datetime.strptime(date1, "%Y-%m-%d").date()
rdate1 = datetime.datetime.strptime(date2, "%Y-%m-%d").date()
delta = (mdate1 - rdate1).days
print delta
Что я должен делать?
python
pandas
date-difference
Джейс Виллам
источник
источник
pd.offsets.Day(1)
(с 's'). Я также обычно это(df['A'] - df['B']) / pd.offsets.Day(-1)
(df['A'] - df['B']) / np.timedelta64(-1, 'D')
по причинам, которые я не полностью понимаю..dt.days
атрибут, который должен быть предпочтительным.Чтобы удалить текстовый элемент days, вы также можете использовать аксессор dt () для серии: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.Series.dt.html
Так,
df[['A','B']] = df[['A','B']].apply(pd.to_datetime) #if conversion required df['C'] = (df['B'] - df['A']).dt.days
который возвращает:
A B C one 2014-01-01 2014-02-28 58 two 2014-02-03 2014-03-01 26
источник
df['C'] = (df['B'] - df['A']).dt.days
не получилось и пришлось пользоватьсяdf['C'] = (df['B'] - df['A']).days
. Любая идея, почему мой не дал количество дней, как ожидалось?datetime64[ns]
если быть точным). Когда я это сделалdf['C'] = (df['B'] - df['A']).dt.days
, я получил ошибку атрибута, в которой говорилось, что AttributeError: объект 'Timedelta' не имеет атрибута 'dt' , поэтому я попробовал df ['C'] = (df ['B'] - df ['A']). дней, которые дали мне желаемый ответ. (Конечно, я использую свой собственный фрейм данных, а не тот, что в примере выше. Или это может быть потому, что у меня также есть время в моей дате, а не как в2018-09-24 10:17:18.800277
)Понимание списка - ваш лучший выбор для самого Pythonic (и самого быстрого) способа сделать это:
[int(i.days) for i in (df.B - df.A)]
Если ваши столбцы не в формате datetime. Более короткий синтаксис будет:
df.A = pd.to_datetime(df.A)
источник
Как насчет этого:
times['days_since'] = max(list(df.index.values)) times['days_since'] = times['days_since'] - times['months'] times
источник