如何从 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】:您可以通过参数order
和value_counts
和index
过滤最高值:
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 与 groupby 函数一起使用并插入新列
如何从 pandas groupby().sum() 的输出创建一个新列?
如何在 Python 中手动排列 Value_counts 的索引
Python Pandas 使用 dataframe.stack().value_counts() - 如何获取计数对象的值?