pandas groupby 是否通过引用或值传递?

sig*_*fel 5 python pandas pandas-groupby

假设我有一个 Pandas DataFrame数据,我想根据特定列col将其拆分

def split_by_column(data, column):

    chunk_list = [(k,g) for k, g in data.groupby(column)]
    return dict(chunk_list)


collection = split_by_column(data, 'col')
Run Code Online (Sandbox Code Playgroud)

这样我以后就可以轻松地访问和应用函数到这个集合。

例如,如果我有一个同时具有数据集合作为实例变量的对象,我是否在内存中有两个单独的数据副本,或者字典是否包含对数据中适当夹头的引用?

小智 1

我试过这个:

data=pd.DataFrame({'a':[1,2,3,4], 'b':[6,9,8,9]})
print('data initial:',data)
def split_by_column(data, column):
    chunk_list = [(k,g) for k, g in data.groupby(column)]
    return dict(chunk_list)
collection = split_by_column(data, 'b')
print('collection initial:',collection)
Run Code Online (Sandbox Code Playgroud)

输出是:

data initial:    a  b
0  1  6
1  2  9
2  3  8
3  4  9
collection initial: {6:    a  b
0  1  6, 8:    a  b
2  3  8, 9:    a  b
1  2  9
3  4  9}
Run Code Online (Sandbox Code Playgroud)

如果我现在更改数据

data.at[3,'a']=5
Run Code Online (Sandbox Code Playgroud)

再次打印数据和集合,输出是这样的:

data new:    a  b
0  1  6
1  2  9
2  3  8
3  5  9
collection new: {6:    a  b
0  1  6, 8:    a  b
2  3  8, 9:    a  b
1  2  9
3  4  9}
Run Code Online (Sandbox Code Playgroud)

由于我也刚刚开始探索 pandas,我无法告诉您底层机制是什么,但由于值 5 仅出现在数据框中,而不出现在字典中,我得出的结论是,您有两个不同的副本您的数据。

我希望,这对您有帮助。最好的,勒帕克