簡體   English   中英

如何使用 lambda 函數在數據幀上使用 Pandas apply()?

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

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