查找攻击方和防御方的次数

2024-06-16 12:26:50 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个任务,需要表示数据集中的数据。我选择了这个数据集https://www.kaggle.com/mylesoneill/game-of-thrones 我想知道Joffrey/Tommen 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().

我也试过这个


Tags: andofcsv数据dfifdefenderking
1条回答
网友
1楼 · 发布于 2024-06-16 12:26:50

您可以过滤数据帧以查找攻击者为Joffrey、defender为Stark的行。然后得到数据帧的长度。比让它逐行迭代要快

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)

相关问题 更多 >