我正在尝试遍历python中的数据框,在我的if语句中,我引用了几行碰巧是Series的列。当我运行代码时,出现以下错误:
The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
数据:
取自@CypherX提供的解决方案。
template = ['some', 'abra', 'cadabra', 'juju', 'detail page', 'lulu', 'boo', 'honolulu', 'detail page']
prev = ['home', 'abra', 'cacobra', 'juju', 'detail page', 'lulu', 'booboo', 'picabo', 'detail here']
df = pd.DataFrame({'Template': template, 'Prev': prev})
Template Prev
0 some home
1 abra abra
2 cadabra cacobra
3 juju juju
4 detail page detail page
5 lulu lulu
6 boo booboo
7 honolulu picabo
8 detail page detail here
我的代码如下:
for row in s:
if (s['Template']=='detail page') and (s['Template']==s['Prev']):
s['Swipe']=1
else:
s['Swipe']=0
其中s
是我的数据框。
该如何解决?有什么想法吗?
答案 0 :(得分:2)
您可以尝试使用s['Swipe']
来设置np.where
的值:
import numpy as np
s['Swipe'] = np.where((s['Template'] == 'detail page') & (s['Template'] == s['Prev']), 1, 0)
答案 1 :(得分:0)
我认为应该是这样的:
s['Swipe'] = (s['Template'] == 'detail page') & (s['Template'] == s['Prev'])
如果需要,可以将结果从布尔值转换为整数。
答案 2 :(得分:0)
由于您没有提供任何可重复的问题数据,所以我自行制定了解决方案。
condition = ((df.Template==df.Prev) & (df.Template=='detail page'))
df['Swipe'] = condition.astype(int)
将条件评估为boolean
,由于您想为True
分配1,为False
分配0,因此只需将boolean
转换为int
会做的。
# Prepare Dummy Data
template = ['some', 'abra', 'cadabra', 'juju', 'detail page', 'lulu', 'boo', 'honolulu', 'detail page']
prev = ['home', 'abra', 'cacobra', 'juju', 'detail page', 'lulu', 'booboo', 'picabo', 'detail here']
df = pd.DataFrame({'Template': template, 'Prev': prev})
# Evaluate Condition
condition = ((df.Template==df.Prev) & (df.Template=='detail page'))
df['Swipe'] = condition.astype(int)
print(df)
输出:
Template Prev Swipe
0 some home 0
1 abra abra 0
2 cadabra cacobra 0
3 juju juju 0
4 detail page detail page 1
5 lulu lulu 0
6 boo booboo 0
7 honolulu picabo 0
8 detail page detail here 0
s
上进行迭代(注意:通常s
用于系列,df
用于数据帧),并返回列名。因此row
实际上不会返回数据帧的行。 row
。for row in s:
if (s['Template']=='detail page') and (s['Template']==s['Prev']):
s['Swipe']=1
else:
s['Swipe']=0
我将打印出带有数据框df
的输出以说明我的观点:
for row in df:
print(row)
输出:
Template
Prev
Swipe
答案 3 :(得分:0)
我能想到的2种快捷方式:
s['Swipe'].loc[(s['Template']=='detail page') & (s['Template']==s['Prev'])]=1
s['Swipe'].loc[(s['Template']!='detail page') | (s['Template']!=s['Prev'])]=0
import numpy as np
s['Swipe'] = np.where((s['Template'] == 'detail page') & (s['Template'] == s['Prev']), 1, 0)