I have a pandas dataframe with multiple columns and I want to create a counter that successively counts 4 rows and 6 rows. I would like it to look like the dataframe below:
| index | counter |
|---|---|
| 0 | 1 |
| 1 | 1 |
| 2 | 1 |
| 3 | 1 |
| 4 | 2 |
| 5 | 2 |
| 6 | 2 |
| 7 | 2 |
| 8 | 2 |
| 9 | 2 |
| 10 | 3 |
| 11 | 3 |
| 12 | 3 |
| 13 | 3 |
As you can see, the first 4 values in counter column is 1, then next 6 values are 2, then again next 4 values are 3.
Advertisement
Answer
Your question is a bit clear after edit, you can create an empty list and a counter variable, then iterate on the range of number of rows incrementing it by 10 i.e. (4+6), then at each iteration, create the required lists of length 4 and 6 with counter and counter+1, add it to the resulting list. Finally take the slice from result list first df.shape[0] values (because it may have few more values than df.shape[0]), and assign it to the new column df[‘counter’].
result = []
counter = 1
for i in range(0, df.shape[0], 10):
result += [counter]*4
counter += 1
result += [counter]*6
counter += 1
df['counter'] = result[:df.shape[0]]
# result [1, 1, 1, 1, 2, 2, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 4, 4]
OUTPUT:
index counter 0 0 1 1 1 1 2 2 1 3 3 1 4 4 2 5 5 2 6 6 2 7 7 2 8 8 2 9 9 2 10 10 3 11 11 3 12 12 3 13 13 3