#pandas
Вопрос:
Я группирую фрейм данных и хотел бы сбросить индекс с reset_index()
помощью . Однако полученная ошибка указывает на то, что она не может вставить столбец, поскольку он уже существует. Я понимаю, как произошла ошибка, но не знаю, как ее исправить.
d = {'c1':['a', 'a', 'b', 'b', 'c', 'c'], 'c2':['Low', 'High', 'Low', 'High', 'High', 'High']}
dd = pd.DataFrame(data=d)
dd.groupby('c1')['c2'].value_counts(normalize=True).mul(100).reset_index()
он возвращается
c1 c2
a High 50.0
Low 50.0
b High 50.0
Low 50.0
c High 100.0
Я бы хотел, чтобы фрейм данных выглядел так
c1 c2 percent
a High 50.0
a Low 50.0
b High 50.0
b Low 50.0
c High 100.0
Как этого достичь ?
Ответ №1:
Ваш код (с reindex
) на самом деле не работает в моей системе, так как один из уровней имеет то же имя value_counts
, что и серия.
Попробуйте reset_index
с name
:
(dd.groupby('c1')['c2']
.value_counts(normalize=True)
.mul(100)
.reset_index(name='percent')
)
Выход:
c1 c2 percent
0 a High 50.0
1 a Low 50.0
2 b High 50.0
3 b Low 50.0
4 c High 100.0
Ответ №2:
Потому c2
что столбец уже существует. Вместо этого вы можете попробовать это, чтобы получить результат вашего желания:
df = dd.groupby('c1')['c2'].value_counts(normalize=True).mul(100)
.to_frame().rename(columns={'c2': 'percent'}).reset_index()
print(df)
c1 c2 percent
0 a High 50.0
1 a Low 50.0
2 b High 50.0
3 b Low 50.0
4 c High 100.0