Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sqlite/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 有线数据帧Groupby应用行为_Python_Python 3.x_Pandas_Dataframe_Pandas Groupby - Fatal编程技术网

Python 有线数据帧Groupby应用行为

Python 有线数据帧Groupby应用行为,python,python-3.x,pandas,dataframe,pandas-groupby,Python,Python 3.x,Pandas,Dataframe,Pandas Groupby,我正面临一个让我发疯的问题。这是关于对数据帧进行分组,并使用apply(应用)将(自定义)函数应用于创建的组: df.groupby([…]).apply(somefunc) 所有这些都是关于数据帧(df)和传递给每个组的sumefunc的索引。 为了说明这一点,我创建了下面的示例,其中我们只存储每个组(groupdf)的数据帧和索引(index)作为由groupby.apply初始化的虚拟类SomeClass的属性。 似乎每个组传递给somefunc的数据帧实例总是相同的,只是其内容发生了变

我正面临一个让我发疯的问题。这是关于对数据帧进行分组,并使用apply(应用)将(自定义)函数应用于创建的组:

df.groupby([…]).apply(somefunc)
所有这些都是关于数据帧(df)和传递给每个组的
sumefunc
的索引。 为了说明这一点,我创建了下面的示例,其中我们只存储每个组(
groupdf
)的数据帧和索引(
index
)作为由
groupby.apply
初始化的虚拟类
SomeClass
的属性。 似乎每个组传递给
somefunc
的数据帧实例总是相同的,只是其内容发生了变化(请参见
SomeClass
正文中的代码版本v1)

现在,为了防止下一个组覆盖previos组的数据帧的内容,我只是深度复制了它(
SomeClass
CodeVersionV2)。 现在发生的事情是,df本身是好的(前面组的df不会被覆盖。但是,dfs的索引仍然被覆盖

如果我们还深度复制索引,那么索引本身就可以了(代码verisonv3),但是df-get的索引仍然被覆盖

有人能解释一下这里发生了什么吗?groupby.apply如何为各个组创建dfs、索引等

非常感谢您事先的帮助! 祝你身体健康;) 伯奇

PS:Python3.8.3、1.1.5。很抱歉,我从头重写了整个问题

PPS:我问过的一位同事刚刚调查了一下。我们可以通过在SomeClass内重置索引来修复索引的覆盖以及df的覆盖,即添加一行
groupdf=groupdf.reset_index().rename(columns={'index':'the_index'})
。然后可以通过
groupdf将“old”索引作为适当的列进行访问。因此,这或多或少会创建一个全新的df和一个新的索引,这两个索引都不会被覆盖。我仍然不太明白
groupby.apply如何创建组数据帧
groupdf

(复制过去的示例)

df=pd.DataFrame([1,1,2],columns=['a'])
打印(df)
打印()
类SomeClass():
定义初始化(自我,组DF):
###
#v1,无副本:
#self.groupdf=groupdf
#self.index=groupdf.index
#v2,df深度复制:
#groupdf=groupdf.copy(deep=True)
#self.groupdf=groupdf
#self.index=groupdf.index
#v3、df和索引副本:
self.groupdf=groupdf.copy(deep=True)
self.index=groupdf.index.copy(deep=True)
###
打印('DF ID',ID(self.groupdf))
打印('index ID',ID(self.index))
print('SomeClassNoCopy:I得到了一个索引为{}的df。格式(self.index))
打印(self.groupdf)
打印()
打印('创建的组:')
gps=df.groupby(['a']).apply(lambda-gdf:SomeClass(gdf))
打印(“\n存储组:”)
对于gps中的v:
打印('SomeClassNoCopy:df和索引{}'。格式(v.index))
打印(v.groupdf)#