簡體   English   中英

Python Pandas在函數中使用數據幀

[英]Python Pandas working with dataframes in functions

我有一個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

對我來說感覺有點笨拙,但我想不出更好的方法來做到這一點而不復制數據幀。 有什么建議么?

如果您不想在原始DataFrame中添加列,則可以創建一個獨立的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'] )來進行分組,而不僅僅是列的名稱。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM