pandas如何对value列数据进行分组groupby?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pandas如何对value列数据进行分组groupby?相关的知识,希望对你有一定的参考价值。

参考技术A 你这截图来看,分组依据不明显, 只要是value 列相邻两行相同就认为是一组,可以先用shift 添加一列作为辅助,然后判断vlaue 和辅助列是否一致,是就表示是一组,不是,就是新的一组

Python pandas 通过对现有列进行分组来创建其他数据框列

【中文标题】Python pandas 通过对现有列进行分组来创建其他数据框列【英文标题】:Python pandas create additional dataframe columns by grouping on existing column 【发布时间】:2015-09-19 02:55:57 【问题描述】:

尝试从现有列的内容创建新的数据框列。用一个例子更容易解释。我想转换这个:

.	Yr	Month	Class	Cost
1	2015	1	L	19.2361
2	2015	1	M	29.4723
3	2015	1	S	48.5980
4	2015	1	T	169.7630
5	2015	2	L	19.1506
6	2015	2	M	30.0886
7	2015	2	S	49.3765
8	2015	2	T	167.0000
9	2015	3	L	19.3465
10	2015	3	M	29.1991
11	2015	3	S	46.2580
12	2015	3	T	157.7916
13	2015	4	L	18.3165
14	2015	4	M	28.2314
15	2015	4	S	44.5844
16	2015	4	T	162.3241
17	2015	5	L	17.4556
18	2015	5	M	27.0434
19	2015	5	S	42.8841
20	2015	5	T	159.3457
21	2015	6	L	16.5343
22	2015	6	M	24.9853
23	2015	6	S	40.5612
24	2015	6	T	153.4902

...进入以下,以便我可以绘制 4 条单独的线 [L、M、S、T]:

.	 Yr	  Month	   L	   M	   S	   T
1	2015	1	19.2361	29.4723	48.5980	169.7630
2	2015	2	19.1506	30.0886	49.3765	167.0000
3	2015	3	19.3465	29.1991	46.2580	157.7916
4	2015	4	18.3165	28.2314	44.5844	162.3241
5	2015	5	17.4556	27.0434	42.8841	159.3457
6	2015	6	16.5343	24.9853	40.5612	153.4902

通过过滤“类”列上的数据框...然后 3 个单独的合并,我能够以一种非常笨拙的方式完成它。

list_class = ['L', 'M', 'S', 'T']
year = 'Yr'
month = 'Month'
df_class = pd.DataFrame()
df_class1 = pd.DataFrame()
df_class2 = pd.DataFrame()
df_class1 = merge(df[[month, year, 'Class','Cost']][df['Class']==list_class[0]], df[[month, year, 'Class','Cost']][df['Class']==list_class[1]], \
            left_on=[month, year], right_on=[month, year])
df_class2 = merge(df[[month, year, 'Class','Cost']][df['Class']==list_class[2]], df[[month, year, 'Class','Cost']][df['Class']==list_class[3]], \
            left_on=[month, year], right_on=[month, year])
df_class = merge(df_class1, df_class2, left_on=[month, year], right_on=[month, year]).groupby([year, month]).mean().plot(figsize(15,8))

必须有更有效的方法。感觉应该用 groupby 来完成,但我无法确定。

【问题讨论】:

【参考方案1】:

您可以先将df 转换为多级索引类型,然后unstack 级别Class 将为您提供所需的内容。假设 df 是您帖子开头显示的原始数据框。

df.set_index(['Yr', 'Month', 'Class'])['Cost'].unstack('Class')

Out[29]: 
Class             L        M        S         T
Yr   Month                                     
2015 1      19.2361  29.4723  48.5980  169.7630
     2      19.1506  30.0886  49.3765  167.0000
     3      19.3465  29.1991  46.2580  157.7916
     4      18.3165  28.2314  44.5844  162.3241
     5      17.4556  27.0434  42.8841  159.3457
     6      16.5343  24.9853  40.5612  153.4902

【讨论】:

建勋 - 完美!谢谢你,很抱歉没有提出挑战。

以上是关于pandas如何对value列数据进行分组groupby?的主要内容,如果未能解决你的问题,请参考以下文章

使用 Python pandas 根据列增量对相同的值进行分组

pandas 如何使用 groupby 在标签中按日期对列进行分组?

python--pandas分组聚合

pandas数据分组

按列表列中的元素对 Pandas 数据框进行分组

Pandas - 分组统计