Pandas 向数据帧添加一行总计
我有一个数据框,我正试图找出如何向每个客户机添加一行,以汇总每个客户机的小时数。以下是我的数据框示例:Pandas 向数据帧添加一行总计,pandas,sum,append,Pandas,Sum,Append,我有一个数据框,我正试图找出如何向每个客户机添加一行,以汇总每个客户机的小时数。以下是我的数据框示例: hours client month A January 203.50 February 227.75 March 159.75 April
hours
client month
A January 203.50
February 227.75
March 159.75
April 203.25
May 199.90
B January 203.50
February 227.75
March 159.75
April 203.25
May 199.90
C January 203.50
February 227.75
March 159.75
April 203.25
May 199.90
我想在每个客户机上添加一行,总结小时数。它看起来是这样的:
hours
client month
A January 203.50
February 227.75
March 159.75
April 203.25
May 199.90
Total 1000.34
B January 203.50
February 227.75
March 159.75
April 203.25
May 199.90
Total 1000.34
C January 203.50
February 227.75
March 159.75
April 203.25
May 199.90
Total 1000.34
我已经厌倦了编写一个for循环,它遍历每个客户机,汇总小时数,然后将新行附加到每个客户机。我正在尝试的循环看起来像这样
在df中的小时数:
df.append(pd.Series(vp.sum(),name='Total'
但是,这不起作用。任何帮助都将不胜感激!!IIUC,您可以使用
concat
pd.concat([df,df.sum(level=0).assign(month='Total').set_index('month',append=True)]).sort_index()
Out[1754]:
hours
client month
A April 203.25
February 227.75
January 203.50
March 159.75
May 199.90
Total 994.15
B April 203.25
February 227.75
January 203.50
March 159.75
May 199.90
Total 994.15
C April 203.25
February 227.75
January 203.50
March 159.75
May 199.90
Total 994.15
您可以
unstack
然后添加列
df.unstack().hours.assign(Total=lambda d: d.sum(1)).stack().to_frame('hours')
hours
client month
A April 203.25
February 227.75
January 203.50
March 159.75
May 199.90
Total 994.15
B April 203.25
February 227.75
January 203.50
March 159.75
May 199.90
Total 994.15
C April 203.25
February 227.75
January 203.50
March 159.75
May 199.90
Total 994.15
保留原始行顺序的变体:
# get old order of months
months = pd.unique(df.index.get_level_values(1)).tolist()
# create total dataframe with to levels of index
totals = pd.DataFrame.from_dict({
(client, 'Total'): {'hours': v}
for client, v in df.hours.sum(level=0).items()
}, 'index')
# append and reindex
df.append(totals).sort_index().reindex(months + ['Total'], level=1)
hours
client month
A January 203.50
February 227.75
March 159.75
April 203.25
May 199.90
Total 994.15
B January 203.50
February 227.75
March 159.75
April 203.25
May 199.90
Total 994.15
C January 203.50
February 227.75
March 159.75
April 203.25
May 199.90
Total 994.15
我把它放在for循环中了吗?我写了你所说的,它不是在每个客户机的末尾添加一个名为“Total”的行,而是在每个客户机的末尾添加所有总计行df@TimothyMcwilliams你看到排序索引了吗?@TimothyMcwilliams-Yw~快乐编码