我需要根据空格分割score
列(包含匹配结果),在多行中展开我的Pandas数据帧的一行。
这就是数据的样子
A B score
1 2 6-1 6-2
3 4 6-4 4-6 6-3
为了达到目标,我使用了here的方法。
稍微调整一下这种方法,我的数据框看起来像这样:
A B score sets
1 2 6-1 6-2 6-1
1 2 6-1 6-2 6-2
3 4 6-4 4-6 6-3 6-4
3 4 6-4 4-6 6-3 4-6
3 4 6-4 4-6 6-3 6-3
但是,我还希望有另一个附加列,表示每场比赛的集合数。它就像是每场比赛的累积计数。我的问题是,如何改变上述链接的解决方案,以获得所需的结果,如下所示:
A B score sets setnumber
1 2 6-1 6-2 6-1 1
1 2 6-1 6-2 6-2 2
3 4 6-4 4-6 6-3 6-4 1
3 4 6-4 4-6 6-3 4-6 2
3 4 6-4 4-6 6-3 6-3 3
我认为在以下代码行中的某个地方需要进行调整,但我无法弄清楚它应该如何工作:
s = df['score'].str.split(' ').apply(pd.Series, 1).stack()
s.index = s.index.droplevel(-1) # to line up with df's index
答案 0 :(得分:3)
您可以使用repeat
,然后使用cumcount
In [2915]: dff = df.set_index(['A', 'B'])['score'].repeat(
df['score'].str.split(' ').str.len()
).reset_index()
In [2916]: dff
Out[2916]:
A B score
0 1 2 6-1 6-2
1 1 2 6-1 6-2
2 3 4 6-4 4-6 6-3
3 3 4 6-4 4-6 6-3
4 3 4 6-4 4-6 6-3
In [2917]: dff.assign(setnumber=dff.groupby(['A', 'B']).cumcount()+1)
Out[2917]:
A B score setnumber
0 1 2 6-1 6-2 1
1 1 2 6-1 6-2 2
2 3 4 6-4 4-6 6-3 1
3 3 4 6-4 4-6 6-3 2
4 3 4 6-4 4-6 6-3 3
您还可以使用dff
.loc
In [2923]: df.loc[df.index.repeat(df['score'].str.split(' ').str.len())]
Out[2923]:
A B score
0 1 2 6-1 6-2
0 1 2 6-1 6-2
1 3 4 6-4 4-6 6-3
1 3 4 6-4 4-6 6-3
1 3 4 6-4 4-6 6-3