簡體   English   中英

如何基於for循環內列的唯一值對pandas數據幀進行切片,並將每個切片傳遞給函數?

[英]How to slice a pandas dataframe based on unique values of a column inside a for loop and pass every slice to a function?

假設我想要一個for loop ,在其每次迭代中,將根據其列之一的唯一值將pandas dataframe df切片為A ,然后將該切片的數據幀傳遞給以數據幀為參數的函數let說出fun(df) 基本上, fun(df)會在for循環的每次迭代中獲得一個新的切片數據幀。 例如,可以說以下是我的數據框:

A    B    C    D
1-1  an  at   23
1-2  ab  can  34
1-2  van bit  45
1-2  vd  sun  23
1-1  so  am   12
...

現在for循環的第一次迭代將下面的數據幀傳遞給fun(df)

A    B    C    D
1-1  an  at   23
1-1  so  am   12

然后下一次迭代會將這個傳遞給fun(df)

A    B    C    D
1-2  ab  can  34
1-2  van bit  45
1-2  vd  sun  23

等等等等。

for循環的迭代次數應等於“ A”的唯一值的數目。 在這種情況下,它將是2。

如何在python中做到這一點? 我是新手,不知道如何進一步。

使用pandas.DataFrame.groupby ,它返回一個可迭代的對象。

def fun(data):
    # pseudo function for a test
    print(data)

for k, d in df.groupby('A'):
    fun(d)

輸出:

     A   B   C   D
0  1-1  an  at  23
4  1-1  so  am  12

     A    B    C   D
1  1-2   ab  can  34
2  1-2  van  bit  45
3  1-2   vd  sun  23

洞察力

pandas.DataFrame.groupby返回((key, grouped-by dataframe), ...)

for k, d in df.groupby('A')中的kkd用於解壓縮返回的可迭代對象。 由於所需輸出不使用鑰匙(即1-11-2 ,......),所以是答案。

答案中的“ fun ”表示任何假設的功能。 正如問題中提到的, fun是該函數將在for循環的每次迭代中獲得一個新的切片數據幀。 在這種情況下,這是一個簡單的print功能,可以直觀地表示df.groupby返回的內容。

暫無
暫無

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

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