[英]pandas dataframe: resample to include all the dates from today's date
[英]Subtracting pandas Dataframe values from today's date
我有一個如下所示的數據框:
Name A B C
D1 1 3 3
D2 2 4 4
D3 2 1 1
如何創建一個相同大小的新數據框,其中每個值都是今天的日期減去我的第一個數據幀的值?
例如,如果今天是2018-04-27,我的新數據框將如下所示:
Name A B C
D1 2018-04-26 2018-04-24 2018-04-24
D2 2018-04-25 2018-04-23 2018-04-23
D3 2018-04-25 2018-04-26 2018-04-26
我認為解決方案將包括類似的東西
df2.iloc[1,1] = datetime.today() - timedelta(days=df1[1,1])
但我遇到了各種類型的錯誤和循環原始df的問題
import datetime as dt
from datetime import timedelta
import pandas as pd
df = pd.DataFrame({'Name':['D1','D2','D3'],'A':[1,2,2],'B':[3,4,1],'C':[3,4,1]})
df.set_index('Name', inplace=True)
df2 = df.applymap(lambda x: dt.date.today() - timedelta(days = x))
df2
A B C
Name
D1 2018-04-26 2018-04-24 2018-04-24
D2 2018-04-25 2018-04-23 2018-04-23
D3 2018-04-25 2018-04-26 2018-04-26
Applymap是你想要使用的
編輯:讓你避免與日期時間進口問題所看到增加進口這里
最好不要使用applymap
df.set_index('Name', inplace=True)
pd.to_datetime('today').date()-df.apply(pd.to_timedelta,unit='d')
Out[428]:
A B C
Name
D1 2018-04-26 2018-04-24 2018-04-24
D2 2018-04-25 2018-04-23 2018-04-23
D3 2018-04-25 2018-04-26 2018-04-26
您可以展平DataFrame的值,以便將它們傳遞給pd.to_timedelta()
。 這使您無需使用.applymap()
或.apply()
:
today = pd.to_datetime(dt.date(2018, 4, 27))
deltas = pd.to_timedelta(df.values.flatten(), unit='d')
df2 = pd.DataFrame(np.reshape((today - deltas).values, df2.shape),
index=df.index, columns=df.columns)
結果:
>>> df2
A B C
Name
D1 2018-04-26 2018-04-24 2018-04-24
D2 2018-04-25 2018-04-23 2018-04-23
D3 2018-04-25 2018-04-26 2018-04-26
>>> df2.dtypes
A datetime64[ns]
B datetime64[ns]
C datetime64[ns]
dtype: object
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.