如何使用 pandas 数据框中的 value_counts 绘制饼图?

How to build a pie chart, with plotly, using value_counts in pandas dataframe?

我有以下 pandas 数据框:

import numpy as np
import pandas as pd
import plotly.express as px

df1 = pd.DataFrame({'Name_City': ['Paris', 'Rio', 'Madri', 
                                  'Lisboa', 'Santiago', 'Toronto',
                                  'Porto', 'Rio', 'Paris',
                                  'Paris', 'Paris', 'Rio',
                                  'Lisboa', 'Lisboa', 'Lisboa',
                                  'Lisboa', 'Rio', 'Madri'],
                   'First': ['P', 'R', 'M', 'L', 'S', 'T', 'P', 'R', 'P',
                             'P', 'P', 'R', 'L', 'L', 'L', 'L', 'R', 'M']})

print(df1)

          Name_City First
                 Paris        P
                 Rio          R
                 Madri        M
                 Lisboa       L
                 Santiago     S
                 Toronto      T
                 Porto        P
                 Rio          R
                 Paris        P
           Paris          P
                 Paris        P
                 Rio          R
                Lisboa        L
                Lisboa        L
                Lisboa        L
                Lisboa        L
                 Rio          R
                Madri         M

首先我想计算每个城市在数据框中出现的次数,所以我做了:

series = df1['Name_City'].value_counts()

df_result = pd.DataFrame(series)

df_result = df_result.reset_index()  

df_result.columns = ['City', 'Total']

print(df_result)

                City      Total
               Lisboa      5
                Rio        4
               Paris       4
               Madri       2
              Santiago     1
              Toronto      1
                Porto      1

注意:第一部分按预期工作。

在第二部分中,我想构建一个(饼图类型)图表来表示出现次数最多的五个城市。其他出现较少的城市我想在图表上显示为“其他”。

我尝试执行以下操作:

df_result_part = df_result.head(5)
print(df_result_part)

                 City   Total
                  Lisboa      5
                   Rio        4
                  Paris       4
                  Madri       2
                 Santiago     1


    fig = px.pie(df_result_part,
                 values='Total',
                 names='City')

    fig.show()

我需要将出现次数最少的分组并命名为“其他”。我想请问如何自动执行此操作?

期望的输出是:

print(df_desired)

            City    Total
             Lisboa   5
            Rio       4
          Paris       4
          Madri       2
           Santiago   1
         Others       2


fig = px.pie(df_desired,
             values='Total',
             names='City')

fig.show()

df_result开始,您可以select第五行之后的所有城市名称替换为“其他”。默认情况下,这将始终有效 value_counts returns 它的输出是排序顺序(递减计数):

df_result.loc[5:, 'City'] = 'other'

import plotly.express as px
fig = px.pie(df_result,
             values='Total',
             names='City')

输出: