如何在pandas系列中使用value_counts(normalize=True)和value_counts()函数?

5

我喜欢展示一个 seriesvalue_counts(normalize=True),这个方法很有效,但我也想在另外一列中展示未规范化的 value_counts()

代码

import pandas as pd

cars = {'Brand': ['Honda Civic','Toyota Corolla','','Audi A4'],
        'Price': [32000,35000,37000,45000]
        }

df = pd.DataFrame(cars, columns = ['Brand', 'Price'])

df.Brand.value_counts(normalize=True)

预期输出

                  perc   count
Toyota Corolla    0.25   1
Audi A4           0.25   1
Honda Civic       0.25   1
                  0.25   1
Name: Brand, dtype: float64

问题

我该如何将这两个信息都附加到系列图表上?

2个回答

7

如果想要使用value_counts,你需要在不使用normalize=True的情况下运行代码:

df = pd.concat([df.Brand.value_counts(normalize=True),
                df.Brand.value_counts()], 
                axis=1,
                keys=('perc','count'))
print (df)
                perc  count
                0.25      1
Honda Civic     0.25      1
Toyota Corolla  0.25      1
Audi A4         0.25      1

另一个想法是在另一个步骤中创建一个perc列,可以使用DataFrame.insert设置新列的位置:
df = df.Brand.value_counts().to_frame('count')
df.insert(0, 'perc', df['count'].div(len(df)))
         
print (df)
                perc  count
                0.25      1
Honda Civic     0.25      1
Toyota Corolla  0.25      1
Audi A4         0.25      1

df = df.Brand.value_counts(normalize=True).to_frame('perc')
df['count'] = df['perc'].mul(len(df))

1

你也可以尝试这种方式:

pd.concat(
    [
        df.Brand.value_counts(),
        df.Brand.value_counts(normalize=True)
    ],
    keys=['counts', 'normalized_counts'],
    axis=1,
)

1
请不要发布基本上只包含代码的答案。请[编辑]您的答案,包括解释代码如何解决问题,何时应该使用它,它的限制是什么,如果可能的话,请提供相关文档链接。 - ljmc

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接