Python Pandas: 将“ . value_count”输出转换为 dataframe

嗨,我想得到数据框架的唯一值的计数。Count _ values 实现了这一点,但是我想在其他地方使用它的输出。我怎样才能转变。Count _ values 输出到熊猫数据框。下面是一个示例代码:

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

谢谢你。

162148 次浏览

对于 index 和 reset_index中的列名,使用 rename_axis:

df = 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 = df.value_counts().rename_axis('unique_values').to_frame('counts')
print (df)
counts
unique_values
2                   3
1                   2

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

警告

当您处理 Pandas的数据结构时,您必须了解 报税表类别

另一个解决方案

就像之前提到的@jezrael,Pandas确实提供了 API pd.Series.to_frame

第一步

你也可以把 pd.Series换成 pd.DataFrame

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

然后,有一个列名为 'a'pd.DataFrame,第一列将成为索引

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


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

第二步

现在怎么办?

如果您想在这里添加新的列名,作为一个 pd.DataFrame,您可以简单地通过 复位 _ index ()的 API 重置索引。

然后,通过 API Df.colomns根据列表更改列名

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_reset = df_val_counts.reset_index()
df_value_counts_reset.columns = ['unique_values', 'counts'] # change column names

我也要附上我的帽子,本质上与@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
pd.DataFrame(
df.groupby(['groupby_col'])['column_to_perform_value_count'].value_counts()
).rename(
columns={'old_column_name': 'new_column_name'}
).reset_index()

从数据框中选择列的子集、分组、对每个组应用 value_count、将 value_count列命名为 Count以及显示前 n 个组的示例。

# Select 5 columns (A..E) from a dataframe (data_df).
# Sort on A,B. groupby B. Display first 3 groups.
df = data_df[['A','B','C','D','E']].sort_values(['A','B'])
g = df.groupby(['B'])
for n,(k,gg) in enumerate(list(g)[:3]): # display first 3 groups
display(k,gg.value_counts().to_frame('Count').reset_index())