回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>我正在尝试使用pandas数据帧的datetimeindex来分配一个名为“season”的新列。你知道吗</p>
<pre><code>winter =[12,1,2]
spring =[3,4,5]
summer =[6,7,8]
autumn =[9,10,11]
DTX_index = [datetime(2017, 2, 1).date(), datetime(2017, 3, 1).date(), datetime(2017, 6, 1).date(), datetime(2017, 9, 1).date()]
DTX_index = pd.to_datetime(DTX_index, utc=True)
df = pd.DataFrame(index=DTX_index)
</code></pre>
<p>我希望这样:</p>
<pre><code> season
2017-02-01 00:00:00+00:00 winter
2017-03-01 00:00:00+00:00 spring
2017-06-01 00:00:00+00:00 summer
2017-09-01 00:00:00+00:00 autumn
</code></pre>
<p>指定一个月</p>
<pre><code>df['month'] = df.index.month
</code></pre>
<p>为单个季节指定布尔值</p>
<pre><code>df['season'] = df.index.month.isin([12,1,2])
</code></pre>
<p>我不知道如何在整个df中根据月份分配季节?我尝试了应用函数:</p>
<pre><code>def add_season(x):
if x.index.month.isin([12,1,2]):
return 'winter'
elif x.index.month.isin([3,4,5]):
return 'spring'
elif x.index.month.isin([6,7,8]):
return 'summer'
elif x.index.month.isin([9,10,11]):
return 'autumn'
df['season'] = df.apply(add_season)
</code></pre>
<p>但这会返回一个值错误:</p>
<pre><code>ValueError: ('The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()', 'occurred at index season')
</code></pre>
<p>可能是因为函数是对整个序列而不是元素进行操作。你知道吗</p>
<p>我相信比我更有应用函数经验的人可以很快解决这个问题?你知道吗</p>
<p>非常感谢</p>