Python Pandas-Lambda内部应用以返回一行
在熊猫数据框架中的应用程序中使用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,
# 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()