Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 按两列分组,并创建计数总计图_Python_Pandas_Plot - Fatal编程技术网

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)