[英]“.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.