[英]Converting "Days" from Timedelta object to regular object
我試圖在“日”合並下面的兩個數據幀,但時間增量 object 阻止了這一點。 我的理解是,我應該能夠然后執行類似print(df['day'].days)
的操作並獲得沒有“天數”的實際日期。
df1
import pandas as pd
from itertools import product
missing = pd.DataFrame(product(range(1,31), range(1,5)), columns=['date','time_of_day'])
missing = pd.concat([missing.assign(pid=_id) for _id in vec], ignore_index=True)
#pd.DataFrame(product([vec, range(1,31), range(1,5)], names=['pid','day','time_of_day']))
missing.pid = missing.pid.astype(str)
自由度 2
from timedelta import date
def random_dates(start, end, n=12):
start_u = start.value//10**9
end_u = end.value//10**9
return pd.to_datetime(np.random.randint(start_u, end_u, n), unit='s')
start = pd.to_datetime('2015-01-01')
end = pd.to_datetime('2018-01-01')
random_dates(start, end)
df = pd.DataFrame({'datestamp':random_dates(start, end)})
df['date'] = pd.to_datetime(df['datestamp']).dt.date
df['time'] = pd.to_datetime(df['datestamp']).dt.time
df = pd.concat([df.assign(pid=_id) for _id in vec], ignore_index=True)
df['last'] = df\
.sort_values('date')\
.groupby('pid')['date']\
.transform('last')
df['days'] = df['last'] - df['date']
df
df['days'].days #doesn't work
合並
missing.merge(df, how = 'left', on = ['pid', 'day'])
所以這將轉換為非 timedelta object 的天數:
def get_custom_str_time(x): return math.floor(x.total_seconds()/(3600*24))
df.insert(0, 'day', df['days'].apply(get_custom_str_time) )
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.