Pandas数据框-基于组的每一列的总和

时间:2019-06-30 05:36:36

标签: python pandas

Panadas-基于第一列的分组的每一列的总和

我有这个文本文件,其中包含表和其他3列,分别指示选择,更新和插入。我想按表格分组,每列的总计和末尾的总计。

df=data.groupby(['Table'])
print df.groupby(['Table'])["Select","Update","Insert"].agg('sum')

Text file has data in this format
Table Select Update Insert
A        10      8      5
B        12      2      0
C        10      2      4
B        19      3      1
D        13      0      5
A        11      7      3

Expected output
Table Select Update Insert
A        21      15     8
B        31      5      1
C        10      2      4
D        13      0      5
Total    75      22    18
带有sum的

df.groupby不能正确汇总每一列的数据。如果聚合仅在一个列上完成,那很好,但是我终端上的输出被弄乱了。

感谢您的帮助!

4 个答案:

答案 0 :(得分:1)

您可以尝试:df.groupby(by='Table').sum()用于汇总表:

       Select  Update  Insert
Table                        
A          21      15       8
B          31       5       1
C          10       2       4
D          13       0       5

总计为df.groupby(by='Table').sum().sum()

Select    75
Update    22
Insert    18
dtype: int64

答案 1 :(得分:1)

您可以尝试使用带有边距= True的熊猫“ pivot_table”功能

data={'Table':['A','B','C','B','D','A'],'Select':[10,12,10,19,13,11],'Update':[8,2,2,3,0,7],'Insert':[5,0,4,1,5,3]}

df =pd.DataFrame(data)

df2 =df.pivot_table(index ='Table',
               margins=True,
               margins_name='Total', # defaults to 'All'
               aggfunc=sum)

df2.reset_index(inplace =True)

df2[['Table','Select','Update','Insert']]

您将获得所需的输出:

   Table  Select  Update  Insert
0      A      21      15       8
1      B      31       5       1
2      C      10       2       4
3      D      13       0       5
4  Total      75      22      18

希望这会有所帮助!

答案 2 :(得分:0)

Table                               ...        
A        10      8      5      0.0  ...     0.0
A        11      7      3      0.0  ...     0.0
B        12      2      0      0.0  ...     0.0
B        19      3      1      0.0  ...     0.0
C        10      2      4      0.0  ...     0.0
D        13      0      5      0.0  ...     0.0
Table Select Update Insert     0.0  ...     0.0

[7 rows x 3 columns]

这是我通过df.groupby(by='Table').sum()获得的输出

答案 3 :(得分:0)

看来,从.log文件加载数据时,熊猫无法正确处理数据

这是如何加载数据


df=pd.DataFrame(data)
print df

Output of frame I get,

                        Table  ...  Insert
0  Table Select Update Insert  ...     NaN
1   A        10      8      5  ...     NaN
2   B        12      2      0  ...     NaN
3   C        10      2      4  ...     NaN
4   B        19      3      1  ...     NaN
5   D        13      0      5  ...     NaN
6   A        11      7      3  ...     NaN

versus  
when I load in data frame using below,
data={'Table':['A','B','C','B','D','A'],'Select':[10,12,10,19,13,11],'Update':[8,2,2,3,0,7],'Insert':[5,0,4,1,5,3]}

output of print df is 
{'Table': ['A', 'B', 'C', 'B', 'D', 'A'], 'Update': [8, 2, 2, 3, 0, 7], 'Select': [10, 12, 10, 19, 13, 11], 'Insert': [5, 0, 4, 1, 5, 3]}

and pivot_table provides the output as expected.

jitesh singla:如果您不介意,能否在Table列上提供有关ivot_table如何与group by一起使用以及如何汇总其他列的数据的详细信息。