Python 按两列分组,并创建计数总计图
我是熊猫队的新手,我正在寻找一种方法来绘制由两列组成的数据。下面是我的例子: 首先,我按“日期”(年份)和“主要类型”列分组Python 按两列分组,并创建计数总计图,python,pandas,plot,Python,Pandas,Plot,我是熊猫队的新手,我正在寻找一种方法来绘制由两列组成的数据。下面是我的例子: 首先,我按“日期”(年份)和“主要类型”列分组 groups = df.groupby([df['Date'].map(lambda x: x.year), pri_type['Primary Type']]) 现在我可以得到一系列基本上完全符合我想要的情节 groups.size().head() Date Primary Type 2001 ARSON 1
groups = df.groupby([df['Date'].map(lambda x: x.year), pri_type['Primary Type']])
现在我可以得到一系列基本上完全符合我想要的情节
groups.size().head()
Date Primary Type
2001 ARSON 1010
ASSAULT 31384
BATTERY 93448
BURGLARY 26011
CRIM SEXUAL ASSAULT 1794
dtype: int64
但是当我绘制这个图时,我得到了一个非常混乱的图,在x轴上有数千个标签。我想得到的是一个x轴上有日期的绘图和一个所有主要类型的分类帐。类似于此图的内容:
提前谢谢 您希望在x轴上显示什么,日期?如果是,您可以将日期设置为索引:
组。设置索引(“日期”)您希望在x轴上显示什么,日期?如果是,您可以将日期设置为索引:
set_index('Date')我提出的解决方案是将序列转换为数据帧并使用该方法。以下是我所做的:
# convert to a dataframe
df = groups.size().to_frame()
| | | 0
|------ | --------------|------
|Date | Primary Type |
| | ARSON | 1010
| | ASSAULT | 31384
| 2001 | BATTERY | 93234
| | BURGLARY | 26031
| | CRIM SEXUAL AS| 1723
# unstack() to pivot the data which puts it in the correct format for plot()
df.unstack(level=-1)
| |0
|------------|-------|---------|-------...
|Primary Type|ARSON |ASSAULT |BATTERY...
|Date | | | ...
|2001 |1010.0 |31384.0 |93234.0...
|2002 |2938.0 |31993.0 |94235.0...
|2003 |955.0 |30082.0 |92834.0...
这几乎是我想要的图形,除了0,但我可能可以去掉它。正如你所看到的,它仍然不是很可读,但这解决了我关于如何绘制它的问题
df.unstack(level=-1).plot(kind='bar', figsize = (10,10))
我提出的解决方案是将序列转换为数据帧并使用该方法。以下是我所做的:
# convert to a dataframe
df = groups.size().to_frame()
| | | 0
|------ | --------------|------
|Date | Primary Type |
| | ARSON | 1010
| | ASSAULT | 31384
| 2001 | BATTERY | 93234
| | BURGLARY | 26031
| | CRIM SEXUAL AS| 1723
# unstack() to pivot the data which puts it in the correct format for plot()
df.unstack(level=-1)
| |0
|------------|-------|---------|-------...
|Primary Type|ARSON |ASSAULT |BATTERY...
|Date | | | ...
|2001 |1010.0 |31384.0 |93234.0...
|2002 |2938.0 |31993.0 |94235.0...
|2003 |955.0 |30082.0 |92834.0...
这几乎是我想要的图形,除了0,但我可能可以去掉它。正如你所看到的,它仍然不是很可读,但这解决了我关于如何绘制它的问题
df.unstack(level=-1).plot(kind='bar', figsize = (10,10))
这看起来像是一场卡格尔比赛。你能添加更多的代码和数据样本吗?也可以把Seabn看作一个工具。()在StackOverflow中搜索熊猫多索引图,您会找到一些解决方案谢谢您的评论。搜索帮助很大。我认为解决方案是将其转换为数据帧并使用unstack()函数。我将补充这一点作为答案@DemetriP您希望看到什么样的附加数据?@randy,算了吧。马腾给你指出了正确的方向。这看起来像是卡格尔比赛的结果。你能添加更多的代码和数据样本吗?也可以把Seabn看作一个工具。()在StackOverflow中搜索熊猫多索引图,您会找到一些解决方案谢谢您的评论。搜索帮助很大。我认为解决方案是将其转换为数据帧并使用unstack()函数。我将补充这一点作为答案@DemetriP您希望看到什么样的附加数据?@randy,算了吧。Maarten为你指出了正确的方向,通过这样做,我去掉了额外的0索引。如果你知道更好的方法,请告诉我。unstacked_df.columns=ustacked_df.columns.droplevel(0),通过这样做,我去掉了额外的0索引。如果你知道更好的方法,请告诉我。unstacked_df.columns=未堆叠的_df.columns.droplevel(0)