python - 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 ...
然而:
如何使用
lambda
和apply
功能并确定输出类型?!
解决方案
目前还不是很清楚预期的确切输出是什么,所以我希望这就是你要找的?
将newcol
有price
- 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
推荐阅读
- python - 如何在 django 中获取模型对象的数量
- python - 从python中的字符串中删除单词(不仅仅是匹配的字母)
- javascript - chainWebpack - 如何设置 InfrastructureLogging
- gradle - 禁用 Gradle 的“使用类而不是 jar 进行编译”?
- php - Wordpress paginate_links 修改第一个链接
- javascript - 在 Web 应用程序中测量 Internet 速度
- ios - 价格下拉菜单不起作用 Apple Developer
- docker - cmake在docker镜像中找不到_package
- json - SwiftUI - 结合更新@Published 性能缓慢
- python - 使用一个目录中所有以 .ann 结尾的文件作为 Cohen 的 Kappa 的 y1 和 y2 值