Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/lua/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python Pandas-Lambda内部应用以返回一行_Python_Python 3.x_Pandas_Lambda_Apply - Fatal编程技术网

Python Pandas-Lambda内部应用以返回一行

Python Pandas-Lambda内部应用以返回一行,python,python-3.x,pandas,lambda,apply,Python,Python 3.x,Pandas,Lambda,Apply,在熊猫数据框架中的应用程序中使用lambda函数时,我希望得到整行,但看起来我得到的是“单个元素” 看看那个代码: # Data sample reviews_2 = pd.DataFrame({ 'price': {0: None, 1: 15.0, 2: 14.0, 3: 13.0}, 'country': {0: 'Italy', 1: 'Portugal', 2: 'US', 3: 'US'}, 'points': {0: 87, 1: 87, 2: 87,

在熊猫数据框架中的应用程序中使用lambda函数时,我希望得到整行,但看起来我得到的是“单个元素”

看看那个代码:

# Data sample
reviews_2 = pd.DataFrame({
    'price': {0: None, 1: 15.0, 2: 14.0, 3: 13.0}, 
    'country': {0: 'Italy', 1: 'Portugal', 2: 'US', 3: 'US'}, 
    'points': {0: 87, 1: 87, 2: 87, 3: 87}
})

print(reviews_2)

mean_price_2 = reviews_2.price.mean() # a value to centering

def remean_points(row):
    row.price = row.price - mean_price_2
    return row

centered_price_2 = reviews_2.apply(remean_points, axis='columns') # returns a DataFrame

print(centered_price_2)
“apply”返回一个数据帧。这是我的预期输出

因此,我尝试使用lambda函数,执行以下操作:

reviews_2 = pd.DataFrame({
    'price': {0: None, 1: 15.0, 2: 14.0, 3: 13.0}, 
    'country': {0: 'Italy', 1: 'Portugal', 2: 'US', 3: 'US'}, 
    'points': {0: 87, 1: 87, 2: 87, 3: 87}
})
print(reviews_2)

mean_price_2 = reviews_2.price.mean()

centered_price_2 = reviews_2.apply(lambda p: p.price - mean_price_2, axis='columns') # returns a Serie!

print(centered_price_2)
但是现在,“应用”返回一个意甲

我知道
apply
试图识别类型。
我正在等待获取一行,但它似乎返回“单个元素”

因此,我的问题是:


lambda函数中的
p
不应该是一行吗

有趣的是:

如果我做了
centered\u price\u 2=reviews\u 2.apply(lambda p:p,axis='columns')

我得到一个数据帧

然而:

如何使用
lambda
apply
函数并确定输出类型


现在还不太清楚预期的确切输出是什么,所以我希望这就是您想要的

newcol
将具有
价格
-
平均价格

>>> reviews_2['newcol'] = reviews_2['price'].apply(lambda x: x - reviews_2.price.mean())

   price   country  points  newcol
0    NaN     Italy      87     NaN
1   15.0  Portugal      87     1.0
2   14.0        US      87     0.0
3   13.0        US      87    -1.0

您需要的/期望的输出是什么?以价格为中心-你需要什么?lambda函数中的新列?
p
是一行。问题在于返回类型的不同。第一个函数返回一个
pd.Series
对象,第二个函数返回一个标量。事实上,它是一个lambda函数是不相关的(它几乎不相关),因此,它相当于
def remean_points(row):return row.price-mean_price_2
@DanailPetrov I wan,以获得数据帧,这与Kaggle练习不同……在任何情况下,你几乎肯定不应该使用
。首先应用
。我编辑我的帖子是为了说预期的输出:像第一个一样的新数据帧!这实际上应该是
reviews\u 2['price']=reviews\u 2['price']-reviews\u 2['price']。mean()