python - 一个序列的真值是模棱两可的。初学者问题
问题描述
对于具有多列的 pandas 数据框,我需要过滤某些值并在另一列中返回一个值。
例如:
df = { "Strings" : ["string_a", "string_b", "string_b", "string_a"],
"Integers" : [10, 15, 50, 30]}
df_pd = pd.DataFrame(df)
def string_int(x, y) :
if x == 'string_a':
return 1
elif x == 'string_b':
return 0
elif y <= 45:
return 1
else:
return 0
df_pd['1_or_0'] = string_int(df_pd['Strings'], df_pd['Intergers'])
我遇到的第一个问题是错误
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
当我尝试实施任何建议的方法时,我会遇到更多错误。
我认为问题在于代码试图比较整个列表而不是元素。
应该有更好的解决方案,但我看不到。
开始学习 python 犯菜鸟错误,但我想更好地理解这个问题。
我知道这个问题已经被多个人提出了,但我从来没有得到一个对我有用的解决方案。
解决方案
您的方法是将系列传递给函数,因此您需要返回一系列(布尔值)
在许多方面,使用条件逻辑更简单。np.where()
在这种情况下,我使用级联逻辑来实现您的逻辑。
import numpy as np
df = { "Strings" : ["string_a", "string_b", "string_b", "string_a"],
"Intergers" : [10, 15, 50, 30]}
df_pd = pd.DataFrame(df)
df_pd = df_pd.assign(**{"1_or_0":lambda dfa: np.where(dfa.Strings.eq("string_a"), 1,
np.where(dfa.Intergers.le(45),1,0))})
字符串 | 整数 | 1_or_0 | |
---|---|---|---|
0 | string_a | 10 | 1 |
1 | string_b | 15 | 1 |
2 | string_b | 50 | 0 |
3 | string_a | 30 | 1 |
推荐阅读
- telegram - 如何处理 Telegram bot API 中错过的测验答案?
- multithreading - Keras/tensorflow 细粒度多线程控制
- reactjs - 加载路径时的回调或 setState
- docker - 用于网络应用程序开发的 Docker 设置
- google-people-api - 从 google people api 获取用户的电话号码?
- wpf - 将应用程序迁移到 .NET Core 3.1 后,WPF WebBrowser 自定义右键菜单停止工作
- sql - 长时间运行的查询sql
- javascript - 无法在Javascript fetch中提取for循环内的数据
- winforms - 在.Net Core WinForm App的工具箱中找不到按钮和gridview控件
- azure - Disable AFD Backend Pool's Backend Host with Azure Cli or Azure REST API