В реальной задаче второй столбец даты содержит дату, ранее предсказанное значение даты. Существует несколько таких прогнозов, сделанных на дату 1d, дату 2d и т. д. В конечном итоге я хочу создать график, сравнивающий окончательное значение со всеми прогнозируемыми в будущем значениями.
Код: Выделить всё
from datetime import datetime#, timedelta #, date #
import pandas as pd
import numpy as np
df = pd.DataFrame({'date1': [10, 11, 12], 'date2': [12, 11, 10], 'rtn':[21,22,23],'new':[99,99,99]})
print(df['date1'].isin(df['date2']) )
print(f'date1 \n{df.date1 == df.date2}')
datatypes = df.dtypes
print(df.dtypes)
print(df)
for index, row in df.iterrows():
row['new']=df.loc[df['date2'] ==row['date1'],'rtn'].iloc[0]
datatypes = df.dtypes
print(df.dtypes)
print(df)
Код: Выделить всё
from datetime import datetime#, timedelta #, date #
import pandas as pd
import numpy as np
date_time_ref = datetime(year=2020, month=1, day=1, hour=00, minute=00, second=00)
date_time_date11 = datetime(year=2024, month=10, day=20, hour=1, minute=00, second=00)
date_time_date12 = datetime(year=2024, month=10, day=21, hour=13, minute=00, second=00)
date_time_date13 = datetime(year=2024, month=10, day=22, hour=1, minute=00, second=00)
date_time_date23 = date_time_date11 #this is to ensure the test dates are identical
date_time_date22 = date_time_date12 #this is to ensure the test dates are identical
date_time_date21 = date_time_date13 #this is to ensure the test dates are identical
print(f'Test {date_time_date11 == date_time_date21}')
print(f'Test {date_time_date11 == date_time_date23}')
df = pd.DataFrame({'date1': [date_time_date11, date_time_date12, date_time_date13], 'date2': [date_time_date21, date_time_date22, date_time_date23], 'rtn':[21,22,23],'new':[99,99,99]})
datatypes = df.dtypes
print(df.dtypes)
print(df)
for index, row in df.iterrows():
row['new']=df.loc[df['date2'] ==row['date1'],'rtn'].iloc[0]
datatypes = df.dtypes
print(df.dtypes)
print(df)
print(df['date1'].isin(df['date2']) )
print(f'date1 \n{df.date1 == df.date2}')
Код: Выделить всё
df = df.reset_index() # make sure indexes pair with number of rows
# 1. convert to strings for comparison
df['date1'] = df['date1'].dt.strftime('%Y-%m-%d %H') #':%M:%S')
df['date2'] = df['date2'].dt.strftime('%Y-%m-%d %H') #:%M:%S')
# 2. convert the datetime column to an ordinal
df['date1'].apply(lambda x:x.toordinal())
df['date2'].apply(lambda x:x.toordinal())
# 3. convert the datetime column to an integer divide the resulting integer by the number of nanoseconds in a second
df['date1'] = df['date1'].astype(int)/ 10**9
df['date2'] = df['date2'].astype(int)/ 10**9
# 4. convert datetime to seconds
pd.to_timedelta(df.date1).dt.total_seconds()
pd.to_timedelta(df.date2).dt.total_seconds()
# 5. convert datetime to float64
df['date1'] = df['date1'] - date_time_ref
df['date2'] = df['date2'] - date_time_ref
df['date1'] = df['date1'] / np.timedelta64(1, 'h')
df['date2'] = df['date2'] / np.timedelta64(1, 'h')
# 6. convert to float64 above to int64
df['date1'] = df['date1'].astype(np.int64)
df['date2'] = df['date2'].astype(np.int64)
Почему один и тот же код работает для одного типа ввода (int), а не для другого тип ввода (дата и время) меня озадачивает.
Подробнее здесь: https://stackoverflow.com/questions/791 ... lumns-date