Python 插入新的第一行并根据最小日期计算时间戳

Python 插入新的第一行并根据最小日期计算时间戳,python,pandas,Python,Pandas,嗨,我正在寻找一个比我的代码更优雅的解决方案。我有一个给定的df,如下所示: import pandas as pd from pandas.tseries.offsets import DateOffset sdate = date(2021,1,31) edate = date(2021,8,30) date_range = pd.date_range(sdate,edate-timedelta(days=1),freq='m') df_test = pd.DataFrame({ 'Da

嗨,我正在寻找一个比我的代码更优雅的解决方案。我有一个给定的df,如下所示:


import pandas as pd
from pandas.tseries.offsets import DateOffset

sdate = date(2021,1,31)
edate = date(2021,8,30)
date_range = pd.date_range(sdate,edate-timedelta(days=1),freq='m')
df_test = pd.DataFrame({ 'Datum': date_range})
我接受这个df,并且必须插入一个具有最小日期的新的第一行

data_perf_indexed_vv = df_test.copy()
minimum_date = df_test['Datum'].min()
data_perf_indexed_vv = data_perf_indexed_vv.reset_index()
df1 = pd.DataFrame([[np.nan] * len(data_perf_indexed_vv.columns)],
                   columns=data_perf_indexed_vv.columns)
data_perf_indexed_vv = df1.append(data_perf_indexed_vv, ignore_index=True)
data_perf_indexed_vv['Datum'].iloc[0] = minimum_date - DateOffset(months=1)
data_perf_indexed_vv.drop(['index'], axis=1)

也许有人有一个更短或更优雅的解决方案。谢谢

不用编写这么大的第二块代码,只需利用:

df_test.loc[len(df_test)+1,'Datum']=(df_test['Datum'].min()-DateOffset(months=1))
最后使用
sort\u values()
方法:

df_test=df_test.sort_values(by='Datum',ignore_index=True)
现在,如果您打印
df_test
,您将获得所需的输出:

#output

    Datum
0   2020-12-31
1   2021-01-31
2   2021-02-28
3   2021-03-31
4   2021-04-30
5   2021-05-31
6   2021-06-30
7   2021-07-31

放弃第二个代码块并添加:
min\u date=pd\u test['Datum'].min()-DateOffset(months=1)
df1=pd.DataFrame({'Datum':min\u date}),然后最终使用concat或append。