【发布时间】:2018-09-29 02:05:16
【问题描述】:
数据集的可重现代码:
df = {'player' : ['a','a','a','a','a','a','a','a','a','b','b','b','b','b','b','b','b','b','c','c','c','c','c','c','c','c','c'],
'week' : ['1','1','1','2','2','2','3','3','3','1','1','1','2','2','2','3','3','3','1','1','1','2','2','2','3','3','3'],
'category': ['RES','VIT','MATCH','RES','VIT','MATCH','RES','VIT','MATCH','RES','VIT','MATCH','RES','VIT','MATCH','RES','VIT','MATCH','RES','VIT','MATCH','RES','VIT','MATCH','RES','VIT','MATCH'],
'energy' : [75,54,87,65,24,82,65,42,35,25,45,87,98,54,82,75,54,87,65,24,82,65,42,35,25,45,98] }
df = pd.DataFrame(data= df)
df = df[['player', 'week', 'category','energy']]
我需要找到“对于每个玩家,找到他能量最大的那一周,并显示所有类别,该周的能量值”
所以我做的是:
1.设置播放器和周为索引
2.遍历索引以找到能量的最大值并返回其 价值
df = df.set_index(['player', 'week'])
for index, row in df1.iterrows():
group = df1.ix[df1['energy'].idxmax()]
获得的输出:
category energy
player week
b 2 RES 98
2 VIT 54
2 MATCH 82
这个获得的输出是整个数据集中的最大能量,我希望每个玩家的最大值与所有其他类别及其在那一周的能量。
预期输出:
我已尝试使用 cmets 中建议的 groupby 方法,
df.groupby(['player','week'])['energy'].max().groupby(level=['player','week'])
得到的输出是:
energy category
player week
a 1 87 VIT
2 82 VIT
3 65 VIT
b 1 87 VIT
2 98 VIT
3 87 VIT
c 1 82 VIT
2 65 VIT
3 98 VIT
【问题讨论】:
-
你是否尝试过按周分组并消耗最大能量
-
我很累
df.groupby(by=['player','week'])['energy','category'].max(),但它没有给我预期的输出。 -
@cmaher 我已经尝试过该解决方案,但它没有给我预期的输出。它返回我能够获得的整个数据集的最大值。但我试图找到每个玩家的最大值,并找到最大值出现的那一周,并返回该周的所有数据。
标签: python python-3.x pandas multi-index