2017-04-24 98 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