[英]How to use Pandas apply() on a dataframe by using lambda functions?
考慮以下代碼:
import pandas as pd
import numpy as np
N = 10
idx = np.linspace(0, 1, N)
labels = ["a", "b", "c"]
values = np.stack((np.random.rand(N), np.random.rand(N), np.random.rand(N))).transpose()
df = pd.DataFrame(index=idx, columns=labels, data=values)
現在假設我想從"a"
列中減去值3
和從"b"
列中減去值5
。
我可以通過以下方式輕松實現:
cols = labels[0:2]
df.loc[:, cols] = df.loc[:, cols].subtract([3, 5])
但是,如果我使用以下內容:
df.loc[:, cols].apply(lambda x: x.subtract([3, 5]))
我得到一個ValueError: Lengths must be equal
。
如果我使用
df.loc[:, cols].apply(lambda x: x.subtract(3))
它有效,但它從cols
中指定的兩列中減去3
。
鑒於方法apply()
的一般性,我想了解當apply()
方法中使用的lambda function
中的x
類型是dataframe
並且我想在不同的列中做不同的事情時如何使用它。
我正在尋找不那么冗長的方法,我知道我可以通過迭代cols
來通過 for 循環來做到這一點。
使用axis=1
處理每行,但它像矢量化的第一個解決方案一樣慢:
df.loc[:, cols] = df.loc[:, cols].apply(lambda x: x.subtract([3, 5]), axis=1)
您可以檢查它如何與print
一起使用:
#each Series has 2 values by rows
df.loc[:, cols].apply(lambda x: print (x), axis=1)
#each Series has all values of columns
df.loc[:, cols].apply(lambda x: print (x))
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.