【发布时间】:2019-08-29 23:43:18
【问题描述】:
我想根据条件对数据进行一些统计处理。但我在下面的if statement 阶段不断收到此错误,我认为这很可能是因为我无法访问浮点对象Q11 中的值。
ValueError:Series 的真值不明确。 ?使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()
import pandas as pd
raw_data = {'patient': [242, 151, 111,122, 342],
'obs': [1, 2, 3, 1, 2],
'treatment': [0, 1, 0, 1, 0],
'score': ['strong', 'weak', 'weak', 'weak', 'strong']}
df = pd.DataFrame(raw_data, columns = ['patient', 'obs', 'treatment', 'score'])
#print(df)
patient obs treatment score
0 242 1 0 strong
1 151 2 1 weak
2 111 3 0 weak
3 122 1 1 weak
4 342 2 0 strong
我定义了一个流程来获取一些信息
df_g=df.groupby("score")
veni_vidi = []
for col in df.columns:
if col=='patient':
Q11 = df_g[col].transform(lambda group: np.percentile(group, q=25))
Q11.reset_index(inplace=True,drop=True) #trying to drop index from here but it seems not working!
for val in df[col]:
if val < Q11: #This is giving error because of index I guess
veni_vidi.append('veni')
else:
veni_vidi.append('vici')
我试图通过做来摆脱索引;
Q11.reset_index(inplace=True,drop=True)
0 267.0
1 116.5
2 116.5
3 116.5
4 267.0
Name: patient, dtype: float64
但不能解决问题。
提前谢谢!
【问题讨论】:
-
不,它给你一个错误,因为
Q11是一个系列。242小于整个系列意味着什么? -
但这似乎是一个 X/Y 问题?您需要实现的操作是什么?几乎可以肯定,有一种更好的方法可以删除循环并使用更简洁的 pandas 函数来做您需要的事情。
-
@ALollz
242只是一个没有特殊含义的数字。这只是定义问题的可重现示例。 -
@ALollz 我尝试将
veni_vidi添加到原始数据框中,在此之前我需要进行逻辑操作来定义它。为了问题,我需要保留循环。 -
是的,我明白这一点,但请重新阅读我写的内容。在引发错误的那一行,您的语法
val < Q11是字面意思 询问,是数字242小于系列Q11。您不是在对照数字检查数字,而是对照整个系列检查单个数字,并期望单个真值。这是模棱两可的,如果它始终为 True,它应该是 True,还是至少一次为 True?
标签: python pandas if-statement logical-operators