为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

江户川乱折腾 2023-03-01 16:05:50
我有一个看起来像这样的数据框:team_1  score_1 team_2  score_2AUS     2       SCO     1ENG     1       ARG     0JPN     0       ENG     2我可以使用以下命令从一个团队中检索所有数据: #list specifiying team of interestteam = ['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_2ENG     1       ARG     0JPN     0       ENG     2我现在如何才能只返回我的“团队”的分数,例如:team    scoreENG     1ENG     2也许为每个团队创建一个索引以便过滤掉?也许对 team_1 和 team_2 列进行编码以过滤掉?
查看完整描述

2 回答

?
森林海

TA贡献2011条经验 获得超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      1


new_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  score

0  ENG      1

1  ENG      2


查看完整回答
反对 回复 2023-03-01
?
眼眸繁星

TA贡献1873条经验 获得超9个赞

合并列,过滤团队中的值,计算分数列的总和,并仅过滤团队和分数:


 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    score

1   ENG        1

5   ENG        2


查看完整回答
反对 回复 2023-03-01
  • 2 回答
  • 0 关注
  • 70 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信