<p>这并不是一个完整的答案,正如<em>插图</em>说明<code>strftime</code>的工作原理:<code>strftime</code>是<code>date(time)</code>对象的一种方法,它以格式字符串作为参数:</p>
<pre><code>import pandas as pd
import datetime as dt
df = {'Date': ['2020-07-01', '2020-07-15']}
df = pd.DataFrame(df)
df['Date'] = pd.to_datetime(df['Date'], yearfirst = True, format = "%Y-%m-%d")
s = [dt.date(df['Date'][i].year, df['Date'][i].month + 1, 1).strftime('%Y-%m-%d')
for i in df['Date'].index]
print(s)
</code></pre>
<p>结果:</p>
<pre><code>['2020-08-01', '2020-08-01']
</code></pre>
<p>再次:没有完整的答案,只是一个提示</p>
<p><strong>编辑</strong>:您可以对此进行矢量化,例如:</p>
<pre><code>import pandas as pd
import datetime as dt
df = {'Date': ['2020-07-01', '2020-07-15']}
df = pd.DataFrame(df)
df['Date'] = pd.to_datetime(df['Date'], yearfirst=True, format='%Y-%m-%d')
df['Fiscal'] = df['Date'].apply(lambda d: dt.date(d.year, d.month, 1)
if d.day < 15 else
dt.date(d.year, d.month + 1, 1))
print(df)
</code></pre>
<p>结果:</p>
<pre><code> Date Fiscal
0 2020-07-01 2020-07-01
1 2020-07-15 2020-08-01
</code></pre>
<p>这里我使用了一个动态的<code>lambda</code>函数。您还可以使用外部定义的函数:</p>
<pre><code>def to_fiscal(date):
if date.day < 15:
return dt.date(date.year, date.month, 1)
return dt.date(date.year, date.month + 1, 1)
df['Fiscal'] = df['Date'].apply(to_fiscal)
</code></pre>
<p>一般来说,矢量化比在行上循环要好,因为循环是在一个更“低”的级别上完成的,而且效率更高</p>