У меня есть таблица, в которой есть столбец "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 |

1
yanadm 24 Апр 2017 в 14:47

2 ответа

Лучший ответ

Давайте попробуем это решение для панд без зацикливания:

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
3
Scott Boston 24 Апр 2017 в 12:40
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
2
Allen 24 Апр 2017 в 12:11