在熊猫中使用lambda和.apply()

2022-01-30 07:04:41 标签 pythonpandas

在熊猫,我试图应用这个lambda函数使用。apply(),我得到这个错误:'ValueError:一个系列的真值是模糊的。a。any a。item使用a。empty a。bool()()()或所有()”。

我哪里做错了?

(beers[:10] - beers.mean()).apply(lambda x: 'low' if x < 0 else 'high')

啤酒是一个系列。

谢谢!

# # #beers is no不是一个Series else you 否则你的代码工作得很好。肯定是一个DataFrame and probably a DataFrame with和可能DataFrame with only one c只有一列。

演示:

>>> beers = pd.Series(np.random.randint(1, 10, 20))
>>> type(beers)
pandas.core.series.Series
>>> (beers[:10] - beers.mean()).apply(lambda x: 'low' if x < 0 else 'high')
0    high
1     low
2    high
3     low
4    high
5    high
6     low
7    high
8    high
9     low
dtype: object

如果beers是DataFrame:

>>> beers = beers.to_frame()
>>> type(beers)
pandas.core.frame.DataFrame
>>> (beers[:10] - beers.mean()).apply(lambda x: 'low' if x < 0 else 'high')
...
ValueError: The truth value of a Series is ambiguous.
Use a.empty, a.bool(), a.item(), a.any() or a.all().

在啤酒只有一个柱的情况下,你可以使用挤压:

>>> (beers[:10] - beers.mean()).squeeze().apply(lambda x: 'low' if x < 0 else 'high')
0    high
1     low
2    high
3     low
4    high
5    high
6     low
7    high
8    high
9     low
Name: 0, dtype: object

我觉得你想做的是这个

如果beers是一个系列,如果是df,你还需要列名

beers_mean = beers.mean()
beers[:10].apply(lambda x: 'low' if (x-beers_mean)<0 else 'high'

它不能导致啤酒[:10]- beer 。mean()进入一个新的系列,为什么你得到一个例外

如果啤酒是DF,你想在表格的一列上做这个

只是先挑出来的

beer_col = beers[['col_name']]
beers_mean = beer_col .mean()
beer_col[:10].apply(lambda x: 'low' if (x-beers_mean)<0 else 'high'
阅读全文

▼ 版权说明

相关文章也很精彩
推荐内容
更多标签
相关热门
全站排行
随便看看

错说 cuoshuo.com —— 程序员的报错记录

部分内容根据CC版权协议转载;网站内容仅供参考,生产环境使用务必查阅官方文档

辽ICP备19011660号-5

×

扫码关注公众号:职场神器
发送: 1
获取永久解锁本站全部文章的验证码