重复pandas DF中的字符串 - 想要返回唯一字符串列表

时间:2016-07-25 15:22:34

标签: python pandas for-loop dataframe

我在pandas DF中有一堆数据,其中包含不一致的偏移字符串字符。对于每个游戏ID(另一列),两个字符串字符对于该游戏ID是唯一的,但不以可预测的模式关闭。无论如何,我正在尝试编写一个辅助函数来获取每个唯一的游戏ID,并获得与之相关的两个团队名称。

例如......

index game_id 0 400827888 1 400827888 2 400827888 3 400827888 4 400827888 ... 555622 400829117 555623 400829117 555624 400829117 555625 400829117

index team 0 ATL 1 DET 2 ATL 3 DET 4 ATL ... 555622 POR 555623 DEN 555624 POR 555625 POR

这是我的悲惨尝试,这是无效的。

def get_teams(df):
    for i in df['gameid']:
        both_teams = [df['team'].astype(str)]
        return(both_teams)

我希望它为游戏ID 400827888返回['ATL','DET],为游戏ID 400829117返回['POR','DEN']。相反,它只返回与每个索引关联的团队名称

1 个答案:

答案 0 :(得分:2)

您可以使用SeriesGroupBy.unique

print (df.groupby('game_id')['team'].unique())
game_id
400827888    [ATL, DET]
400829117    [POR, DEN]
Name: team, dtype: object

循环使用iterrows

for i, g in df.groupby('game_id')['team'].unique().reset_index().iterrows():
    print (g.game_id)
    print (g.team)

编辑:

如果需要通过某个字符串找到所有game_id(例如DET),请使用boolean indexing

s = df.groupby('game_id')['team'].unique()

print (s[s.apply(lambda x: 'DET' in x)].index.tolist())
[400827888]