Как агрегировать строку «другие» в фрейме данных - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь создать «чужую» строку в pandas фрейме данных, считая строки форума в данных и вычисляя процент случаев.

Исходный фрейм данных

            forum  ...                date
12       panorama  ... 2020-01-13 10:55:00
13           test  ... 2020-01-13 16:58:00
10         kultur  ... 2020-01-14 11:18:00
9        panorama  ... 2020-01-18 13:26:00
7          inland  ... 2020-01-24 10:46:00

Мой код

df = df.groupby(df["forum"]).agg({'forum': 'count'})
df['perc'] = df['forum'] / df['forum'].sum()*100
result = df.nlargest(3, columns='perc')
result.loc['forum'] = ['Others', df.loc[~df.forum.isin(result.forum), 'perc'].sum()]
print(result)

но это приводит к

               forum  perc
forum                 
panorama      10  62.5
kultur         2  12.5
test           2  12.5
forum     Others  12.5

что мне нужно изменить, чтобы получить следующий результат?

forum           perc      
panorama        62.5
kultur          12.5
test            12.5
Others          12.5

1 Ответ

1 голос
/ 25 апреля 2020

Чтобы получить процент, вы можете использовать value_counts с normalize=True

forum_percents = df['forum'].value_counts(normalize=True)
panorama    0.4
kultur      0.2
test        0.2
inland      0.2
Name: forum, dtype: float64

И затем найти top-3:

top_3_forums = forum_percents.sort_values(ascending=False).head(3)
panorama    0.4
inland      0.2
test        0.2
Name: forum, dtype: float64

Наконец, добавьте строку «Другие»:

forums = top_3_forums.append(pd.Series([1 - top_3_forums.sum()], index=['Others']))
panorama    0.4
inland      0.2
test        0.2
Others      0.2
dtype: float64
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...