如何从 value_counts() 的输出创建新的数据框

Posted

技术标签:

【中文标题】如何从 value_counts() 的输出创建新的数据框【英文标题】:how to create new data frame from the output of value_counts() 【发布时间】:2019-07-10 08:25:59 【问题描述】:

我有一个数据框名称“df”,我在代码下方运行...

df['Station'].value_counts()

我的输出将是:

Station 308A   -   3955

Station 329   -    3905

Station 313   -    2963

.....................

Station 381   -    2383

名称:站,数据类型:int64

现在我想在 countplot 中绘制这个:

sns.countplot(x= "Station", data=df['Station'].value_counts().head(30), palette="bright")

给我错误!!!

因为我只能在 Data ex: data=df 中传递数据帧

所以我的问题是我希望将 df['Station'].value_counts() 这一行的输出作为新数据框

这样我就可以直接将其传递为sns(data=new_df)

【问题讨论】:

【参考方案1】:

您可以通过参数ordervalue_countsindex 过滤最高值:

np.random.seed(34345)

df = pd.DataFrame('Station':np.random.randint(100, size=1000)).astype(str).radd('station')
print (df.head())
     Station
0  station28
1  station48
2  station48
3  station61
4  station30

N = 5
sns.countplot(x='Station', 
              data=df, 
              palette="bright",
              order=df['Station'].value_counts().index[:N])

【讨论】:

我得到了数据新的数据框 df1,比我通过了 x= 'Station' 我看到在我的图表中没有绘制任何计数值也尝试使用 'Index' 相同的结果 @Shiva_Achari - 所以需要sns.countplot(x="Station", data=df, palette="bright") 在我的计数图中,所有 .head(30) 站的值为 1 , 有 500 个不同的站点....我只想绘制计数值最高的前 20 或前 30... 是的,它起作用了,通过设置 order=df['Station'].value_counts().iloc[:N].index【参考方案2】:

您也可以使用count_values() 创建新的Dataframe,但应该是sns.countplot(),而不是sns.barplot()

df = pd.DataFrame('Station': np.random.randint(10, size=10))
df['Station'] = 'station'+df['Station'].astype('str')

value_count = df['Station'].value_counts()
df1 = pd.DataFrame('Station': value_count.index, 'Values': value_count.values)

# df1.head(3) will select top 3 rows
sns.barplot(x= "Station",y='Values', data=df1.head(3), palette="bright")

【讨论】:

以上是关于如何从 value_counts() 的输出创建新的数据框的主要内容,如果未能解决你的问题,请参考以下文章

在 Pandas value_counts() 中提取值

根据 pandas 数据框中的条件将 value_counts 与 groupby 函数一起使用并插入新列

如何从 pandas groupby().sum() 的输出创建一个新列?

按列分组并有一列带有 value_counts 字典

如何在 Python 中手动排列 Value_counts 的索引

Python Pandas 使用 dataframe.stack().value_counts() - 如何获取计数对象的值?