[英]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')
中的k
, k
和d
用於解壓縮返回的可迭代對象。 由於所需輸出不使用鑰匙(即1-1
, 1-2
,......),所以是答案。
答案中的“ fun
”表示任何假設的功能。 正如問題中提到的, fun
是該函數將在for循環的每次迭代中獲得一個新的切片數據幀。 在這種情況下,這是一個簡單的print
功能,可以直觀地表示df.groupby
返回的內容。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.