【发布时间】:2019-07-01 12:10:47
【问题描述】:
我正在尝试根据现有列中的字符串为我的数据分配 8 个标签之一。但是,使用我使用的方法会出现此错误:
ValueError:Series 的真值不明确。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我正在寻找 144 个不同的字符串,我想将它们分配给 8 个标签。
这是我的意思的简化示例。如果 A 是我的数据框中的现有列,我想创建 B 并根据 A 的值分配字符串。
数据框:
A B
0 1 low
1 1 low
2 2 mid
3 3 mid
4 5 high
5 4 mid
6 2 mid
7 5 high
我目前使用的代码是这样的:
for index, row in df.iterrows():
if df['A'] == 1:
df['Label'] = 'low'
elif any([df['A'] == 2, df['A'] == 3, df['A'] == 4]):
df['Label'] = 'mid'
elif df['A'] == 5:
df['Label'] = 'high'
我认为是使用 any() 给了我错误。 据我了解,这是因为 pandas 的工作原理,但我不太了解。有没有更简单的方法来做到这一点?
任何帮助或指点将不胜感激:)
【问题讨论】:
-
好像你从来没有达到“高”状态,这是你想要的吗?
-
l=[df.A.eq(1),df.A.isin([2,3,4]),df.A.eq(5)]然后df['B']=np.select(l,['low','mid','high'])会做得更快。不要在这种情况下使用 iterrows -
我想我达到了几次。 A 列中有两个 5 的实例。
-
但根据您的情况,它应该评估为“中”,不是吗?
-
啊,抱歉 - 这是一个错字。应该是 4。现在更正了。
标签: python python-3.x pandas any