我这里有df2,它是从1月1日到8月26日的一系列值。我想将每个季节的每个日期范围内的值移动到新数据帧中的相应列中。我犯了这个错误,不确定下一步该去哪里。有人有什么想法吗?
'print(df2)
seasons = (pd.DataFrame(columns = ['Winter','Spring','Summer', 'Autumn']))
Sp = df2[pd.date_range(start = '01/01/2020', end = '28/02/2020')]
for value in Sp:
if value >0:
seasons['Winter'].append(value)'
通常,在panda中构建DataFrame时,最好将数据收集在本地集合(列表、dicts、元组(中,然后在最后将它们转换为DataFrame。逐位向DataFrame添加单元格或行的速度较慢。
您在这里得到的具体错误是,append只适用于组合panda对象。
你可以使用.loc
分配来做你所描述的事情,但不建议这样做:
for i, value in enumerate(Sp.values):
seasons.loc[i, 'Winter'] = value
但你拉值的方式让我觉得新表在这里没有什么意义。
最好在df2中添加一个名为Season的新列,根据日期将每一行标记为Winter、Summer等。然后可以使用groupby('Season')
或query('Season == "Winter"')
逐季提取数据。
要创建季节列,你只需要一个函数来告诉你一行在哪个季节。我不知道你的表中有什么,我也不太擅长日期时间对象,但它的形式是:
def assign_season(index):
season = ...
return season
然后创建一个类似于的列
df2['Season'] = [assign_season(x) for x in df.index]
您不必使用索引,可以使用列,但形式基本相同。只需确保函数是为您传递给它的内容而设计的。您还可以键入多个列值:
def assign_season(val1, val2):
...
df2['Season'] = [assign_season(*vals)
for vals in df2[['Column1', 'Column2']].values]