首页 > 解决方案 > 基于日期时间的子集数据框

问题描述

我对如何将数据框的特定月份的日期进行子集化有点困惑。

数据框是museum_data,其中包含访客信息。数据框索引是日期时间。

最后,我想要一条由两条线组成的线图,一条是夏季每个月的访客数量,另一个是冬季每个月的访客数量,叠加在自己身上(我意识到这在逻辑上不会很有用,但这只是为了练习日期的子集数据框)。

我想出了下面的代码,但没有任何结果:

museum_data["datetime"] = pd.to_datetime(museum_data.index)

winter = {'Year':[2014,2015,2016,2017,2018,2019], 'Month':['Jan','Feb','Sep','Oct','Nov','Dec']}
summer = {'Year':[2014,2015,2016,2017,2018,2019], 'Month':['Mar','Apr','May','Jun','Jul','Aug']}

winter_months = []
for x in winter['Year']:
    for y in winter['Month']:
        new = str(x)+'-'+str(y)+'-01'
        pd.to_datetime(new)
        winter_months.append(new)

summer_months = []
for x in summer['Year']:
    for y in summer['Month']:
        new = str(x)+'-'+str(y)+'-01'
        pd.to_datetime(new)
        summer_months.append(new)

    
summer1 = pd.DataFrame(data=museum_data[museum_data['datetime'] in summer_months])

winter1 = pd.DataFrame(data=museum_data[museum_data['datetime'] in winter_months])


plt.figure(figsize=(16,6))
sns.lineplot(data=summer1, label='Summer')
sns.lineplot(data=winter1, label='Winter')

上面代码中的summer1 行(因此是winter1)给了我一个错误:ValueError:一个系列的真值是不明确的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。

请让我知道如何使代码正常工作,以及是否有任何更有效的方法来相应地对数据进行子集化。谢谢!

标签: pythonpandas

解决方案


您需要更改两件事:

summer1 = pd.DataFrame(data=museum_data[museum_data['datetime'].isin(summer_months)])

new = pd.to_datetime(new) # otherwise this line will have no effect

推荐阅读