在进行数据分析时,经常会遇到根据已有的数据列,按照一定条件创建新的数据列,然后进行进一步分析。

今天,我们来看一个根据已有数据按照一定条件创建新的数据列的方法。

数据如下:

import pandas as pddf = pd.DataFrame({'team_A': ['Spain', 'Germany', 'Brazil', 'France'],                  'team_B': ['USA', 'Argentina', 'Mexico', 'Belgium'],                  'score_A': [5, 3, 2, 0],                  'score_B': [4, 0, 3, 0]},                 columns = ['team_A', 'team_B', 'score_A', 'score_B'])dfOut[2]:    team_A     team_B  score_A  score_B0    Spain        USA        5        41  Germany  Argentina        3        02   Brazil     Mexico        2        33   France    Belgium        0        0

问题: 从上面数据中创建新的一个数据列,用来存储获胜队伍的名称。

即,根据 "scoreA" 与 "scoreB" 比较的结果,来获取相应的结果。

例如,第一行, "Spain":"USA" 为 5:4 , "Spain" 获胜, 新创建的列中存储的结果为 "Spain"。

下面介绍两种方法来实现上述要求。

第一种方法

第一种方法是 利用 Pandas 中 DataFrame 的条件选择功能来实现,过程如下:

# 创建新的列 "win_team",赋值为空白df['win_team'] = ''# 创建判断条件 maskmask = df['score_A'] - df['score_B']df.loc[mask > 0, 'win_team'] = df.loc[mask > 0, 'team_A']df.loc[mask < 0, 'win_team'] = df.loc[mask < 0, 'team_B']df.loc[mask == 0, 'win_team'] = 'Draw'dfOut[3]:    team_A     team_B  score_A  score_B win_team0    Spain        USA        5        4    Spain1  Germany  Argentina        3        0  Germany2   Brazil     Mexico        2        3   Mexico3   France    Belgium        0        0     Draw

第二种方法

第二种方法是结合 DataFrame.iterrows() 以及 Python 的 list 的功能来实现,过程如下:

# The second method to get the winnersdef find_win_team(df):    winners = []    for i, row in df.iterrows():        if row['score_A'] > row['score_B']:            winners.append(row['team_A'])        elif row['score_A'] < row['score_B']:            winners.append(row['team_B'])        else:            winners.append('Draw')    return winnersdf['winner'] = find_win_team(df)dfOut[4]:    team_A     team_B  score_A  score_B win_team   winner0    Spain        USA        5        4    Spain    Spain1  Germany  Argentina        3        0  Germany  Germany2   Brazil     Mexico        2        3   Mexico   Mexico3   France    Belgium        0        0     Draw     Draw

关于 DataFrame.iterrows(), 我们先来看看其运行结果。

for row_index, row in df.iterrows():    print('%s\n%s' % (row_index, row))0team_A      Spainteam_B        USAscore_A         5score_B         4win_team    Spainwinner      SpainName: 0, dtype: object1team_A        Germanyteam_B      Argentinascore_A             3score_B             0win_team      Germanywinner        GermanyName: 1, dtype: object2team_A      Brazilteam_B      Mexicoscore_A          2score_B          3win_team    Mexicowinner      MexicoName: 2, dtype: object3team_A       Franceteam_B      Belgiumscore_A           0score_B           0win_team       Drawwinner         DrawName: 3, dtype: object

DataFrame.iterrows() 的作用是将 dataframe的每行转换成为一个 Series,可以理解为 针对于每一行,做了行列转置。

图示如下:

END


Pandas小册子

Groupby概览 | 文本拆分 | 按指定list排序 |


©著作权归作者所有:来自51CTO博客作者mb5fe18e7c44408的原创作品,如需转载,请注明出处,否则将追究法律责任

更多相关文章

  1. Pandas小册子:日期数据处理 - 如何按日期筛选、显示及统计数据
  2. 2017年文章汇总 - Python数据之道
  3. Python数据类型-List介绍(下)-列表推导式
  4. Python数据类型-List介绍(上)
  5. 内卷?猝死?企业如何利用数据分析提升人效比,让员工远离“996”?
  6. 【工具】历史文章分类汇总-V6 | Python数据之道
  7. js中基础数据结构数组去重问题
  8. mysql group_concat 获取一对多的数据
  9. 【工具】历史文章分类汇总-V4 | Python数据之道

随机推荐

  1. Android Activity savedInstanceState
  2. Android NDK学习 Android.mk实例和NDK实
  3. 移动开发:Android数据连接浅析
  4. Android(安卓)SQLITE 操作工具类
  5. android 实现静默安装、卸载
  6. Android(安卓)sdk manager更新 下载API源
  7. 【Android】Android和PHP开发最佳实践完
  8. Android studio--将项目生成为jar包
  9. Android 酷炫 倒计时的实现
  10. android删除android拦截短信并删除该条短