Я хотел бы добавить столбец в dataframe pandas, где это значение является добавочным значением, начиная со значения из другого столбца. Например, скажем, у меня есть следующий фрейм.pandas get counts on previous column
df = pd.DataFrame([['a', 1], ['a', 1], ['b', 5], ['c', 10], ['c', 10], ['c', 10]], columns=['x', 'y'])
df
x y
0 a 1
1 a 1
2 b 5
3 c 10
4 c 10
5 c 10
Есть ли какая-нибудь функция pandas, которая вернет серию, увеличивающую значение для каждой группы? другими словами 'a'
начнет с 1
, 'b'
с 5
и 'c'
с 10
. Серия выход будет (1, 2, 5, 10, 11, 12)
поэтому он может быть добавлен к исходному dataframe так:
x y z
0 a 1 1
1 a 1 2
2 b 5 5
3 c 10 10
4 c 10 11
5 c 10 12
Я попытался следующие:
z = []
for start, length in zip(df.y.unique(), df.groupby('x').agg('count')['y']):
z.append(list(range(start, length + start)))
np.array(z).flatten()
z
[[1, 2], [5], [10, 11, 12]]
Это не совсем понимаю, что мне нужно, я не знаю, почему массив не сглаживается и кажется слишком сложным для кажущейся простой задачи.
РЕДАКТИРОВАТЬ: Решение должно быть расширяемой до более сложных dataframes, а также, например:
df = pd.DataFrame([['a', 1], ['b', 5], ['c', 10], ['d', 5]], columns=['x', 'y'])
df = df.append([df]*(50),ignore_index=True)
где оба 'a'
и 'b'
значения в столбце «X» являются eqaul до 5. В обоих из тех, экземпляры подсчета следует начинать в 5
Используйте 'г .extend (диапазон (начало, длина + старт)) 'вместо' z.append ... ' – andrew