2017-04-24 94 views
1

我有一張表有一列「Col1」,看起來像這樣:加入列的一些熊貓計算

| Col1 |

| 2 |

| 2 |

| 4 |

| 4 |

| 4 |

| 4 |

| 3 |

| 3 |

| 3 |

| 3 |

| 3 |

| 3 |

我需要創建一個新列「Col2」。此後的表應該如下所示:

| Col1 | Col2 |

| 2 | 1 |

| 2 | 2 |

| 4 | 1 |

| 4 | 2 |

| 4 | 3 |

| 4 | 4 |

| 3 | 1 |

| 3 | 2 |

| 3 | 3 |

| 3 | 1 |

| 3 | 2 |

| 3 | 3 |

是否可以這樣做,如果我連續有相同的值,代碼從1開始?以3爲例。

| 3 | 1 |

| 3 | 2 |

| 3 | 3 |

| 3 | 1 |

| 3 | 2 |

| 3 | 3 |

+0

爲什麼最後的值不是'3-4','3-5','3- 6'? – jezrael

+0

他達到了3,所以你從1開始。 –

+0

如果列中包含3,那麼它應該計算在從1到3的第二列中,例如,如果是4,然後是從1到4,依此類推。在第一列3中重複三次,分配四四行,等等。這對我來說很困難。 –

回答

3

讓我們試試這個大熊貓解決方案,而循環:

df2 = df.assign(Col2=df.groupby('Col1')['Col1'].cumcount().mod(df['Col1']).add(1)) 
print(df2) 

輸出:

Col1 Col2 
0  2  1 
1  2  2 
2  4  1 
3  4  2 
4  4  3 
5  4  4 
6  3  1 
7  3  2 
8  3  3 
9  3  1 
10  3  2 
11  3  3 
+0

糟糕。我忘了分配。謝謝! @jezrael –

+0

非常好,整潔的答案! – MaxU

+0

太棒了!謝謝! –

2
import pandas as pd 
df = pd.DataFrame({'Col1':[2,2,4,4,4,4,3,3,3,3,3,3]}) 
i = 0 
Col2 = [] 
Col1 = df.Col1 

#Construct Col2 
while i < (len(Col1)): 
    Col2.extend(list(range(1,Col1[i]+1))) 
    i = len(Col2) 
#Add Col2 to Dataframe 
df['Col2'] = Col2