Python Pandas在函数中使用数据框。

3

我有一个DataFrame想要传递给一个函数,从中提取一些信息然后返回这些信息。最初我的代码设置如下:

df = pd.DataFrame( {
   'A': [1,1,1,1,2,2,2,3,3,4,4,4],
   'B': [5,5,6,7,5,6,6,7,7,6,7,7],
   'C': [1,1,1,1,1,1,1,1,1,1,1,1]
    } );

def test_function(df):

    df['D'] = 0

    df.D = np.random.rand(len(df))

    grouped = df.groupby('A')
    df = grouped.first()
    df = df['D']

    return df


Ds = test_function(df)

print(df)
print(Ds)

这将返回:

    A  B  C         D
0   1  5  1  0.582319
1   1  5  1  0.269779
2   1  6  1  0.421593
3   1  7  1  0.797121
4   2  5  1  0.366410
5   2  6  1  0.486445
6   2  6  1  0.001217
7   3  7  1  0.262586
8   3  7  1  0.146543
9   4  6  1  0.985894
10  4  7  1  0.312070
11  4  7  1  0.498103
A
1    0.582319
2    0.366410
3    0.262586
4    0.985894
Name: D, dtype: float64

我的想法是,我不想复制我的大型数据框,所以我会添加一个工作列,并且只返回我想要的信息,而不影响原始数据框。当然,这样做是行不通的,因为我没有复制数据框,所以添加一列就是添加一列。目前我正在做类似以下的事情:

add column
results = Derive information
delete column
return results

我觉得这种方法有些笨拙,但如果不复制数据框,我想不到更好的方法。有什么建议吗?

1个回答

2
如果您不想向原始数据框中添加列,则可以创建一个独立的Series并将groupby方法应用于该Series。
def test_function(df):
    ser = pd.Series(np.random.rand(len(df)))
    grouped = ser.groupby(df['A'])
    return grouped.first()

Ds = test_function(df)

产量
A
1    0.017537
2    0.392849
3    0.451406
4    0.234016
dtype: float64

因此,test_function完全不会修改df。请注意,ser.groupby可以传递一个值序列(例如df['A'])来分组,而不仅仅是列名。

不错的解决方案,我没想到你可以那样使用 groupby - TristanMatthews
是的,在指定分组时可以使用大量的对象。请参见:http://pandas.pydata.org/pandas-docs/dev/groupby.html#splitting-an-object-into-groups。 - unutbu

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接