【发布时间】:2015-11-26 09:17:27
【问题描述】:
我有一个数据框,我想按其中一列对元素进行分组,并且当这些列具有相同的元素时,我想将它们组合成一个大元素(跨越几行)。最后我需要把它变成乳胶代码。
说我有类似的东西
import pandas as pd
import random
table=pd.DataFrame({'a':[1,2,2,2,3,6,6],'b':[-6,-4,-3,-1,0,-1,-2],'c':random.sample(xrange(30), 7)},index=range(7))
给出数据框
| | a | b | c |
-----------------
| 0 | 1 |-6 | 19|
-----------------
| 1 | 2 |-4 | 12|
-----------------
| 2 | 2 |-3 | 16|
-----------------
| 3 | 2 |-1 | 23|
-----------------
| 4 | 3 | 0 | 0 |
-----------------
| 5 | 4 |-1 | 21|
-----------------
| 6 | 4 |-2 | 15|
现在我想按列对它进行分组,例如(是否将索引保留在最左边的列中并不重要):
| a | b | c |
-------------
| 1 |-6 | 19|
-------------
| |-4 | 12|
--------
| 2 |-3 | 16|
---------
| |-1 | 23|
-------------
| 3 | 0 | 0 |
-------------
| |-1 | 21|
---------
| 4 |-2 | 15|
有些元素跨越多行;希望上面能解释我的意思。我几乎可以通过使用
summary=pd.pivot_table(table, index=['a','b'],values=['c'])
但是这使它成为多索引(?),即
| | | c |
-------------
| a | b | |
-------------
| 1 |-6 | 19|
...
使用时会出现问题
summary.to_latex()
获取乳胶代码。此外,对于几个值列,pd.pivot_table() 以一种新的方式对它们进行排序,而我想保留原始 DataFrame 的顺序。 (请注意,如果有任何行同时具有相同的 a 和 b,这会更糟,但我的数据并非如此)
有没有办法将数据透视表的标题行展平为一个标题行,并保持值列的顺序?或者完全做到这一点的另一种方式?我已经查看了其他一些选项,例如 pd.groupby(),但没有找到任何东西。
【问题讨论】:
-
我认为如果使用
summary=pd.pivot_table(table, index=['a','b'],values=['c'])获得多索引(因为a和b2 列设置为索引)以及如何让排序的df 自定义方式解释this。
标签: python pandas dataframe grouping pivot-table