我有以下问题,我的python代码不起作用。希望得到一些关于为什么以及如何解决的建议。
以下是示例数据框:
cust_id max_nibt nibt_0 nibt_1 nibt_10 line_0 line_1 line_10 11 200 -5 200 500 100 200 300 22 300 -10 100 300 100 200 300 33 400 -20 0 400 100 200 300
for i in range (0,11):
if (df4['nibt_%s' % i] == df4['max_nibt']):
df4['model_line'] = df4['line_%s' % i]
代码给出了以下错误:
ValueError:系列的真值是不明确的。使用a.empty,a.bool(),a.item(),a.any()或a.all()
但是,当我使用.any()
时,它只会给我指定model_line = line_10的最后一个范围。当我使用.all()
时,所有cust_ids的答案都是相同的。想法?提前谢谢。
答案 0 :(得分:4)
我必须猜测你想要什么,但你显然没有正确使用def parse_entities(data):
return ",".join([entity['name'] + ":" + entity['sentiment']
for entity_data in data.values()
for entity in entity_data
if not entity['sentiment'] == 'none'])
...请参阅here以获得更好的解释。
IIUC :
您希望在pd.Series
等于line_x
nibt_x
的值
max_nibt
答案 1 :(得分:2)
考虑将.loc
用于行索引条件。按原样,你的for
循环比较两列的所有值(即pandas Series)是否相等,因此任意数量的布尔结果:
for i in [0,1,10]:
df4.loc[df4['nibt_%s' % i] == df4['max_nibt'], 'model_line'] = df4['line_%s' % i]
或者,由于此for
循环可以覆盖相同的新列 model_line ,因此请考虑添加 model_line 的后缀版本:
for i in [0,1,10]:
df4.loc[df4['nibt_%s' % i] == df4['max_nibt'], 'model_line_%s' % i] = df4['line_%s' % i]
答案 2 :(得分:1)
你不能比较那样的系列,因为大熊猫将如何知道你想要比较哪些元素?
如果我理解正确,你可以这样做:
for i in range(0,11):
for j,k in df.iterrows():
if k['nibt_%s' % i] == k['max_nibt']:
df.iloc[j]['model_line'] = df.iloc[j]['line_%s' % i]