如果在第二个数据帧中比较满足条件,则Python数据帧计数

2024-05-19 18:41:44 发布

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

我有一个数据框UFC_data,上面有一个与战斗机a、B和胜利者进行UFC战斗的列表

data = {'fighter_A':['Tony Ferguson', 'Al Iaquinta', 'Robbie Lawler'], 
        'fighter_B':['Donald Cerrone', 'Donald Cerrone', 'Donald Cerrone'],
        'winner': ['Tony Ferguson', 'Donald Cerrone', 'Robbie Lawler']}
UFC_data = pd.DataFrame(data)

+-------+---------------+----------------+----------------+
| Index |   fighter_A   |   fighter_B    |     winner     |
+-------+---------------+----------------+----------------+
|     0 | Tony Ferguson | Donald Cerrone | Tony Ferguson  |
|     1 | Al Iaquinta   | Donald Cerrone | Donald Cerrone |
|     2 | Robbie Lawler | Donald Cerrone | Robbie Lawler  |
+-------+---------------+----------------+----------------+

我创建了第二个数据框战斗机列表,列出了我想要完成的每架战斗机以及每架战斗机的获胜次数

+-------+----------------+------+
| Index |    fighter     | wins |
+-------+----------------+------+
|     0 | Tony Ferguson  |      |
|     1 | Al Iaquinta    |      |
|     2 | Robbie Lawler  |      |
|     3 | Donald Cerrone |      |
+-------+----------------+------+

到现在为止,我还没能统计出每架战斗机的获胜次数

for index, row in fighter_list.iterrows():
    fighter_list['wins'][index] = UFC_data['winner'].loc[UFC_data['winner'] == fighter_list['fighter'][index]].sum()

Tags: dataindexlistaltonydonaldufcwinner
2条回答

使用由^{}创建的^{}^{}替换缺少的值,并将值转换为整数:

s = UFC_data['winner'].value_counts()
fighter_list['wins'] = fighter_list['fighter'].map(s).fillna(0).astype(int)
print (fighter_list)
          fighter  wins
0   Tony Ferguson     1
1     Al Iaquinta     0
2   Robbie Lawler     1
3  Donald Cerrone     1

定义以下功能:

def winCnt(row):
    return UFC_data.winner[UFC_data.winner == row.fighter].count()

然后将其应用于每一行,并将结果保存在目标列中:

fighter_list['wins'] = fighter_list.apply(winCnt, axis=1)

相关问题 更多 >