筛选字符串位于多列中的数据

2024-04-28 06:40:24 发布

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

我有一个如下所示的数据帧:

team_1  score_1 team_2  score_2
AUS     2       SCO     1
ENG     1       ARG     0
JPN     0       ENG     2

我可以使用以下方法从单个团队检索所有数据: #列出指定感兴趣的团队

team = ['ENG']

#对数据帧进行切片,以仅显示列“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列进行编码以过滤掉


Tags: 数据方法dfarg切片团队engteam
2条回答

Melt列,filter表示团队中的值,计算得分列的总和,并仅筛选团队和得分:

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

相关问题 更多 >