Я подсчитываю количество отрицательных и положительных чисел в течение каждого года. В конечном итоге я хочу получить процент отрицательных и положительных результатов за каждый год.
Я пробовал группировать по годам и подсчитывать категории, но новые столбцы появляются без имени.
df1= df.groupby(['Year','Count of Negative/Positive Margins'])['Count of Negative/Positive Margins'].count()
df1.head()
Out[194]:
Year Count of Negative/Positive Margins
2005 1 4001
2 1373
2006 1 4046
2 1304
2007 1 4156
Name: Count of Negative/Positive Margins, dtype: int64
Это мой ожидаемый результат:
2005 1 74%
2 26%
.
.
.
Почему эти два в сумме составляют 98%?
Используйте SeriesGroupBy.value_counts
с группировкой только по столбцу Year
и параметру normalize=True
, затем умножьте на 100
, округлите на Series.round
, преобразуйте в строки и добавьте %
:
df = (df.groupby('Year')['Count of Negative/Positive Margins']
.value_counts(normalize=True)
.mul(100)
.round()
.astype(str)
.add('%')
.reset_index(name='percentage')
)
Попробуйте
df.groupby('Year')['Count of Negative/Positive Margins'].value_counts(normalize=True) * 100