首页 > 解决方案 > Pandas - 内部的 Lambda 应用返回一行

问题描述

在 Pandas DataFrame 的应用程序中使用 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)

那个“应用”返回一个 DataFrame。这是我的预期输出!

因此,我尝试使用 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)

但是现在,“应用”返回一个 Serie!

我知道apply尝试识别类型。
我在等着排,但它看起来返回一个“单个元素”......

所以我的问题:

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

有趣的:

如果我这样做centered_price_2 = reviews_2.apply(lambda p: p, axis='columns')
我会得到一个 DataFrame ...

然而:

如何使用lambdaapply功能并确定输出类型?!

标签: pythonpython-3.xpandaslambdaapply

解决方案


目前还不是很清楚预期的确切输出是什么,所以我希望这就是你要找的?

newcolprice- mean price

>>> 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

推荐阅读