我在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']。相反,它只返回与每个索引关联的团队名称
答案 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]