Python 熊猫堆积条形图
我有以下数据集:Python 熊猫堆积条形图,python,pandas,plot,bar-chart,Python,Pandas,Plot,Bar Chart,我有以下数据集: SessionId Query 1 a 1 b 2 a 3 b 3 b 3 c 3 a 我想显示一个堆叠的条形图,其中每个会话都有一个条形图,该条形图将由每个查询的不同颜色组成,堆叠的大小将是每个会话中查询数量的大小 我试过这样的方法: result = data.groupby('S
SessionId Query
1 a
1 b
2 a
3 b
3 b
3 c
3 a
我想显示一个堆叠的条形图,其中每个会话都有一个条形图,该条形图将由每个查询的不同颜色组成,堆叠的大小将是每个会话中查询数量的大小
我试过这样的方法:
result = data.groupby('SessionId').apply(
lambda group: (
group.groupby('Query').apply(
lambda queryGroup: (
queryGroup.count()
)
)
)
)
但是它在一个表中给出了一个奇怪的表,因为堆积条形图依赖于绘制不同的列,所以您需要将数据表旋转,以获得包含行中查询数的列形式的查询 试试这个:
df = pd.DataFrame({"session":[1,1,2,2,3,3],
"query":list("ababab"), "count":[5,7,32,5,8,1]})
df.pivot("session","query").plot(kind="bar", stacked=True)
输出:
堆积条形图依赖于绘制不同的列,因此您需要将数据表旋转,以将查询作为包含行中查询数的列 试试这个:
df = pd.DataFrame({"session":[1,1,2,2,3,3],
"query":list("ababab"), "count":[5,7,32,5,8,1]})
df.pivot("session","query").plot(kind="bar", stacked=True)
输出:
如果我正确理解了你的问题,我应该做这项工作:
import pandas as pd
data = pd.DataFrame({'SessionId': [1, 1, 2, 3, 3, 3, 3],
'Query': ['a', 'b', 'a', 'b', 'b', 'c', 'a']})
pd.crosstab(data.SessionId, data.Query).plot.barh(stacked=True)
如果我正确理解了你的问题,我应该做这项工作:
import pandas as pd
data = pd.DataFrame({'SessionId': [1, 1, 2, 3, 3, 3, 3],
'Query': ['a', 'b', 'a', 'b', 'b', 'c', 'a']})
pd.crosstab(data.SessionId, data.Query).plot.barh(stacked=True)
您应该按两列进行分组,并使用
.size()
聚合(如果我没有记错的话)。然后你就可以得到条形图所需的数据了。@Shovalt:这看起来有点像data.groupby(['SessionId',Query']).size().unstack().plot.barh(stacked=True)
,我猜。@stephan:正是我的意思,我在移动,无法测试:)你应该按两列分组,并使用.size()
聚合(如果我没记错的话)。然后你就可以得到条形图所需的数据了。@Shovalt:这看起来像是数据。groupby(['SessionId',Query']).size().unstack().plot.barh(stacked=True)
,我猜。@stephan:正是我的意思,我当时在手机上,无法测试:)惊人的一行@李:是的,crosstab
有时非常有用。它基本上是一个包装。因此,您可以使用pd.pivot\u表(data,None,'SessionId',Query',len.plot.barh(stacked=True)
获得相同的结果,这可能会更高效一些(但看起来不太好看)。令人惊讶的一行代码@李:是的,crosstab
有时非常有用。它基本上是一个包装。因此,您可以使用pd.pivot\u表(data,None,'SessionId',Query',len).plot.barh(stacked=True)
获得相同的结果,这可能会更高效一些(但看起来不太好看)。