我有一个作业,需要从数据集中表示数据。我选择了此数据集https://www.kaggle.com/mylesoneill/game-of-thrones 我正试图找出乔佛里/汤曼·巴拉森(Jommen Baratheon)攻击罗布·斯塔克(Robb Stark)的次数。
df = pd.read_csv('battles.csv')
starkWar = 0
for x in df:
if (df.attacker_king == 'Joffrey/Tommen Baratheon') and
(df.defender_king == 'Robb Stark'):
starkWar + 1
我尝试使用&
而不是and
,并且尝试这样做:
df['attacker_king'] == 'Joffrey/Tommen Baratheon'
if df[(df['attacker_king'] == 'Joffrey/Tommen Baratheon') & (df['defender_king'] == 'Robb Stark')]:
代替了我目前的方式。所有这些都给我这个错误:
The truth value of a Series is ambiguous.
Use a.empty, a.bool(), a.item(), a.any() or a.all().
我也尝试过
答案 0 :(得分:1)
您可以过滤数据框以找到攻击者是乔弗里而防御者是史塔克的行。然后只需获取该数据帧的长度即可。比逐行迭代要快。
starkWar = len(df.loc[(df['attacker_king'] == 'Joffrey/Tommen Baratheon') & (df['defender_king'] == 'Robb Stark')])
但是如果您使用原始代码并按行进行迭代(如果行数不多,这也是可行的选择:
df = pd.read_csv('battles.csv')
starkWar = 0
for i, row in df.iterrows():
if (row['attacker_king'] == 'Joffrey/Tommen Baratheon') and row['defender_king'] == 'Robb Stark'):
starkWar += 1
print (starkWar)