首页 > 解决方案 > Python Pandas - 到目前为止在每一行的列中找到的字符串计数

问题描述

我正在对过去的 NHL 赛季进行一些分析和可视化,并且在我的 DataFrame 中创建一些额外的数据/功能时遇到了困难。

这是数据框的简化版本,其中每一行代表一个游戏。

game_id h_abbr a_abbr 
0001    WSH    TOR 
0002    ANA    TOR 
0003    TOR    MIN 

我如何计算到目前为止每支球队打了多少场比赛(包括有问题的比赛),所以新列看起来像这样?

game_id h_abbr a_abbr ht_game_no at_game_no
0001    WSH    TOR    1          1
0002    ANA    TOR    1          2
0003    TOR    MIN    3          1

经过大量的搜索和尝试,我只找到了一种方法来计算球队打了多少场主客场比赛,但我对打球的总数感兴趣。

df['Nth_away_game'] = df.groupby('a_abbr').cumcount() + 1

标签: pythonpandas

解决方案


想法是通过 重塑值DataFrame.stack,然后使用GroupBy.cumcount,检查列名DataFrame.add_suffix,最后DataFrame.join到原始:

s = df[['h_abbr','a_abbr']].stack()
df = df.join(s.groupby(s).cumcount().add(1).unstack().add_suffix('_no'))
print (df)
   game_id h_abbr a_abbr  h_abbr_no  a_abbr_no
0        1    WSH    TOR          1          1
1        2    ANA    TOR          1          2
2        3    TOR    MIN          3          1

推荐阅读