【问题标题】:Pandas dataframe: group by columnn and let duplicates of this columnn span several rowsPandas 数据框:按列分组并让该列的重复项跨越多行
【发布时间】: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']) 获得多索引(因为ab 2 列设置为索引)以及如何让排序的df 自定义方式解释this

标签: python pandas dataframe grouping pivot-table


【解决方案1】:

您似乎想要具有multirow 效果的乳胶代码。 pivot_table 方法并没有给你。事实上,我认为pd.DataFrame.to_latex() 不会有multirow/merged 单元格用于乳胶。你需要自己写。

如果您不需要合并单元格,而是可以使用空白单元格,您可以尝试以下操作:

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))

table.loc[table['a'].diff() == 0, 'a'] = ''

print table.to_latex(index=False)

#Output
\begin{tabular}{lrr}
\toprule
 a &  b &   c \\
\midrule
 1 & -6 &  23 \\
 2 & -4 &   2 \\
   & -3 &  20 \\
   & -1 &  21 \\
 3 &  0 &   5 \\
 6 & -1 &  17 \\
   & -2 &  22 \\
\bottomrule
\end{tabular}

【讨论】:

    猜你喜欢
    • 2019-08-29
    • 2018-07-19
    • 2013-04-29
    • 1970-01-01
    • 1970-01-01
    • 2018-03-20
    • 1970-01-01
    • 2020-02-27
    相关资源
    最近更新 更多