在字符串在多列中的熊猫中过滤数据

我有一个看起来像这样的数据框:


team_1  score_1 team_2  score_2

AUS     2       SCO     1

ENG     1       ARG     0

JPN     0       ENG     2

我可以使用以下命令从一个团队中检索所有数据: #list specifiying team of interest


team = ['ENG']

#slice 数据框以仅显示列“Team 1”或“Team 2”值在指定字符串列表“team”中的行


df.loc[df['team_1'].isin(team) | df['team_2'].isin(team)]

team_1  score_1 team_2  score_2

ENG     1       ARG     0

JPN     0       ENG     2

我现在如何才能只返回我的“团队”的分数,例如:


team    score

ENG     1

ENG     2

也许为每个团队创建一个索引以便过滤掉?也许对 team_1 和 team_2 列进行编码以过滤掉?


江户川乱折腾
浏览 158回答 2
2回答

森林海

new_df_1 = df[df.team_1 =='ENG'][['team_1', 'score_1']]new_df_1 =new_df_1.rename(columns={"team_1":"team", "score_1":"score"})#   team  score#  0  ENG      1new_df_2 = df[df.team_2 =='ENG'][['team_2', 'score_2']]new_df_2 = new_df_2.rename(columns={"team_2":"team", "score_2":"score"})#  team  score# 1  ENG      2然后连接两个数据框:pd.concat([new_df_1, new_df_2])输出是: team  score0  ENG      11  ENG      2

眼眸繁星

合并列,过滤团队中的值,计算分数列的总和,并仅过滤团队和分数: team = ["ENG"](    df    .melt(cols, value_name="team")    .query("team in @team")    .assign(score=lambda x: x.filter(like="score").sum(axis=1))    .loc[:, ["team", "score"]])    team    score1   ENG        15   ENG        2
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python