【发布时间】:2021-05-12 18:21:45
【问题描述】:
以下代码是我的数据科学项目笔记本的块之一。 “frame”是一个数据框,“graf4”是我尝试复制框架并对其进行修改以获取 mt 季节性情节。
但是,每次运行这段代码时,“frame”数据帧的值都会乘以 3000,这对我来说没有意义,因为据我了解,下面的代码从未修改过“frame”并在最后删除“graf4”。我所期望的是只看到我想要的情节而不修改“框架”。截至目前,我的情节中“价格”的值是错误的,原因似乎是在这段代码中发生的“框架”df中“价格”列的值发生了一些不希望的变化。预先感谢您帮助找出问题所在。
graf4 = frame
graf4['cost'] = graf4['price']*graf4['tickets']
graf4 = graf4.groupby(['month','year'], as_index=False).agg({'tickets':'sum', 'price':'sum'})
graf4['price'] = graf4['price']/graf4['tickets']
sns.lineplot(data=graf4, x='MES',y='TARIFA',hue='ANO')
del(graf4)
frame.head() #inserted to test the described mistake
作为一个注释,这个块的目的是总结每张票的平均价格。为了实现这个目标,我通过在 groupby 子句之前将价格和票数相乘将票价转换为票价总成本,并在 groupby 子句之后通过将列除以票数将其转换回。
【问题讨论】:
-
在python中使用
deepcopy作为=是浅拷贝例如li2 = copy.deepcopy(li1) -
stackoverflow.com/questions/62538804/… 也是相关的。这个问题稍微复杂一些。有时您会 幸运 因为许多 pandas 操作会创建新对象,因此这些操作本身会破坏浅层副本(即您的 groupby 行不会修改帧,该行之后的任何内容也不会,因为此时链接已断开)