我有一个关于足球成绩的熊猫数据框。数据框的每一行代表一场足球赛。每场比赛的信息如下:
Day | WinningTeamID | LosingTeamID | WinningPoints | LosingPoints | WinningFouls | ... |
1 13 1 45 5 3
1 12 4 21 12 4
也就是说,信息是根据游戏结果来划分的:胜负。 我想检索一个特定团队(如12)的每场比赛的数据。
Day | Points | Fouls | ... |
1 21 4 ...
2 32 6 ...
最简单的方法是扫描整个数据帧,检查特定的teamID是否处于WinningID或LosingID状态,然后基于此检索“丢失列”或“赢得列”。 有没有更“优雅”的方式来切片熊猫数据框? 这只会给我12队参与的比赛的子集。
df[df[WinningTeamID == 12] | [LosingTeamID == 12]]
如何过滤这些数据并创建所需的数据帧?
假设我们可以选择数据的格式。什么是理想的?自从我们 想要收集每个
TeamID
的统计信息,理想情况下我们应该有一个TeamID
s列 并为每个统计数据(包括结果)单独列。数据如下:
下面是我们如何将给定的数据操作为所需的形式:
收益率
现在我们可以使用
^{} 将
Day
列移到索引中。在索引中放置
Day
的目的是“保护”它不受操纵 (主要是stack
调用)仅用于标记为Losing
或Winning
的列。如果有其他列,如Location
或Officials
与Day
一样,不属于Losing
或Winning
,那么 您还需要将它们包含在set_index
调用中:例如df = df.set_index(['Day', 'Location', 'Officials'])
。尝试从上面的代码中注释掉} 的外观:
df = df.set_index(['Day'])
。然后逐行遍历代码。 特别是,比较有和没有set_index
调用时^{对于
df = df.set_index(['Day'])
:没有
df = df.set_index(['Day'])
:如果没有
set_index
调用,您将得到不需要的行Outcome
等于NaN
的行。目的
是创建一个多级列索引(称为 MultiIndex)哪个 根据需要标记列
Losing
或Winning
。 注意,通过分离标签的Losing
或Winning
部分, 标签的其余部分将被复制。我们最终得到一个数据帧
df
,例如,有两列标记为“Points”。 这样熊猫就可以识别出这些列的相似之处。最大的好处——我们之所以遇到设置多索引的麻烦,是为了通过调用^{} 来“统一”这些“相似”列:
stack
、unstack
、set_index
和reset_index
是4种基本的数据帧重塑操作。这4种方法一起允许您将数据帧中的数据移动到任何位置 想要——在列中,行索引或列索引。
上面的代码是如何使用这些工具的一个例子(好吧,四个中的三个) 将reshape data转换成所需的形式。
我觉得应该更像是:
相关问题 更多 >
编程相关推荐