Py学习  »  Python

如何用python绘制df.groupby.value_counts()结果?[复制品]

Katherine Conlon • 7 年前 • 2777 次点击  

嗨,我想获取数据帧的唯一值的计数。Count_值实现了这一点,但是我想在其他地方使用它的输出。如何将.count_值输出转换为熊猫数据帧。下面是一个示例代码:

import pandas as pd
df = pd.DataFrame({'a':[1, 1, 2, 2, 2]})
value_counts = df['a'].value_counts(dropna=True, sort=True)
print(value_counts)
print(type(value_counts))

输出为:

2    3
1    2
Name: a, dtype: int64
<class 'pandas.core.series.Series'>

我需要的是这样的数据框架:

unique_values  counts
2              3
1              2

谢谢您。

Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/31647
文章 [ 3 ]  |  最新文章 7 年前
Constantino
Reply   •   1 楼
Constantino    7 年前

我也会戴上帽子,基本上与@wy hsu解决方案相同,但功能格式如下:

def value_counts_df(df, col):
    """
    Returns pd.value_counts() as a DataFrame

    Parameters
    ----------
    df : Pandas Dataframe
        Dataframe on which to run value_counts(), must have column `col`.
    col : str
        Name of column in `df` for which to generate counts

    Returns
    -------
    Pandas Dataframe
        Returned dataframe will have a single column named "count" which contains the count_values()
        for each unique value of df[col]. The index name of this dataframe is `col`.

    Example
    -------
    >>> value_counts_df(pd.DataFrame({'a':[1, 1, 2, 2, 2]}), 'a')
       count
    a
    2      3
    1      2
    """
    df = pd.DataFrame(df[col].value_counts())
    df.index.name = col
    df.columns = ['count']
    return df
WY Hsu
Reply   •   2 楼
WY Hsu    7 年前

我只是遇到了同样的问题,所以我在这里提出了我的想法。

警告

当你处理的数据结构 Pandas ,你必须知道 返回类型 .

这里的另一个解决方案

就像前面提到的那样, 熊猫 提供API pd.Series.to_frame .

步骤1

你也可以把 pd.Series pd.DataFrame 只是做

df_val_counts = pd.DataFrame(value_counts) # wrap pd.Series to pd.DataFrame

那么,你有一个 数据文件 列名称为的 'a' ,您的第一列将成为索引

Input:  print(df_value_counts.index.values)
Output: [2 1]

Input:  print(df_value_counts.columns)
Output: Index(['a'], dtype='object')

步骤2

现在怎么办?

如果要在此处添加新的列名,作为 数据文件 ,您可以通过 reset_index() .

然后,通过api列表更改列名 df.coloumns

df_value_counts = df_value_counts.reset_index()
df_value_counts.columns = ['unique_values', 'counts']

那么,你得到了你需要的

Output:

       unique_values    counts
    0              2         3
    1              1         2

完整答案在这里

import pandas as pd

df = pd.DataFrame({'a':[1, 1, 2, 2, 2]})
value_counts = df['a'].value_counts(dropna=True, sort=True)

# solution here
df_val_counts = pd.DataFrame(value_counts)
df_value_counts = df_value_counts.reset_index()
df_value_counts.columns = ['unique_values', 'counts'] # change column names
jezrael
Reply   •   3 楼
jezrael    8 年前

使用 rename_axis 用于索引和中列的名称 reset_index :

df = value_counts.rename_axis('unique_values').reset_index(name='counts')
print (df)
   unique_values  counts
0              2       3
1              1       2

或者如果需要一列数据帧,则使用 Series.to_frame :

df = value_counts.rename_axis('unique_values').to_frame('counts')
print (df)
               counts
unique_values        
2                   3
1                   2