2017-09-23 60 views
0

我需要基於分割基於空格的score列(包含匹配結果)在兩行中擴展我的熊貓數據框的單個行。熊貓數據框:將列擴展爲行加上增量編號

這就是數據的模樣

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 

我想在下面的代碼行的適應需要做的地方,但我不能」 W圖出來,但是,它應該是如何工作的:

s = df['score'].str.split(' ').apply(pd.Series, 1).stack() 
s.index = s.index.droplevel(-1) # to line up with df's index 

回答

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 
+0

我剛剛解決了這個問題。有什麼區別嗎? 'df ['setnumber'] = df.groupby(['A','B'])。cumcount()+ 1' – beta

+0

不多,'assign'返回一個副本,你的方法將它設置爲'df'。 – Zero

+0

太好了,謝謝。將盡可能接受。 – beta

相關問題