【问题标题】:Does pandas groupby pass by reference or value?pandas groupby 是否通过引用或值传递?
【发布时间】:2020-04-10 19:02:09
【问题描述】:

假设我有一个 pandas DataFrame data,我想将它拆分为特定的列 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')

这样我以后可以很容易地访问这个集合并将函数应用到这个集合中。

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

【问题讨论】:

标签: python pandas pandas-groupby


【解决方案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)

输出是:

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}

如果我现在更改数据

data.at[3,'a']=5

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

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}

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

希望对您有所帮助。 最好的,lepakk

【讨论】:

  • (传值)
  • 确实,这个例子是按值传递的,因为我调用了原始数据帧,在函数中本地操作它,然后将它(在 split_by_column 函数之外)分配给变量“集合”。据我了解,数据永远不会在全局范围内更改,但在函数内部,会创建一个全新的变量 chunk_list 并在本地从数据中读取某些内容,但从不放置指向它的指针。有时我发现这个话题很混乱,但我喜欢 this page 非常有助于理解,python 如何复制(或不复制)。
猜你喜欢
  • 2014-02-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-01
  • 1970-01-01
  • 2017-02-08
  • 2016-06-19
相关资源
最近更新 更多