簡體   English   中英

熊貓在第k個參數中的“ .apply()”

[英]“.apply()” in Pandas to k-th argument

我想將自己的多參數函數應用到Pandas數據幀(或其中的一系列數據),並使用數據幀條目作為我的N參數函數中的第k個參數。

僅當我將數據框作為第一個參數傳遞時,它才似乎有效。 我希望能夠通過其他參數之一傳遞數據框。


# A simple 3 argument function:
def my_func(a, b, c):
    return (a/b)**c

# Data-Frame:
d1 = {
    'column1': [1.1, 1.2, 1.3, ],
    'column2': [2.1, 2.2, 2.3, ]
}
df = pd.DataFrame(d1, index = [1, 2, 3])


# I can apply it fine if I pass the columns as the first argument i.e. "a":
df.apply(my_func, b=7, c=9)

# However, I am unable to pass the columns through arguments "b" or "c":
df.apply(my_func, a = 7, c = 9)

這將返回TypeError :( “ my_func()對於參數'a'具有多個值”,“在索引column1處發生”)

我希望能夠通過我自己的多參數函數的任何參數傳遞數據框(或系列)的列。 是否有一種簡單/直觀(非黑客式)的方法?

如果我對您的理解正確,那么您需要做的是:

my_func(df['column1'], b=7, c=5)

熊貓系列可以乘以/除以/以獲得常數,從而返回相同大小的系列。

在更復雜的情況下,當標量運算不夠用時,也可以將其寫為:

df.apply(lambda row: my_func(row['column1'], b=7, c=5), axis=1)

這里axis=1告訴Pandas將此功能應用於行而不是列(默認)

要逐個應用此功能,可以改用df.appymap

df.applymap(lambda value: my_func(7, value, c=5)

然而,這將是更快 ,如果my_func或其輸入可以調整使用的載體,而不是:

my_func(np.ones(df.shape) * 7, df, c=5)

暫無
暫無

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

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