大约一周前,我才刚开始学习熊猫,而现在,我一直在努力研究熊猫数据框。我的数据如下:
State NY CA Other Total
Year
2003 450 50 25 525
2004 300 75 5 380
2005 500 100 100 700
2006 250 50 100 400
我从一个数据集制作了这张表,该数据集包含我在这里表示为State的变量的大约30个值。在示例中,如果它们不是NY或CA,我将它们加起来并放在“其他”类别中。这样的年份是根据标准化的日期列表(最初是mm / dd / yyyy和yyyy-mm-dd)得出的,如果这会导致我的问题:
dict = {'Date': pd.to_datetime(my_df.Date).dt.year}
及更高版本:
my_df = my_df.rename_axis('Year')
我现在尝试在底部添加一行以显示每个类别的总数:
final_df = my_df.append({'Year' : 'Total',
'NY': my_df.NY.sum(),
'CA': my_df.CA.sum(),
'Other': my_df.Other.sum(),
'Total': my_df.Total.sum()},
ignore_index=True)
从技术上讲这确实可行,但是它使我的表看起来像这样:
NY CA Other Total State
0 450 50 25 525 NaN
1 300 75 5 380 NaN
2 500 100 100 700 NaN
3 250 50 100 400 NaN
4 a b c d Total
(“ a”等是各列的实际总数。)它在开头添加一列,并在我的“ Year”(年)列结尾。实际上,它也删除了“日期”标签,并将最后一列中的所有年份都转换为NaN。
有什么办法可以使此格式正确?谢谢您的宝贵时间。
答案 0 :(得分:2)
我相信您需要通过Series
和sum
创建rename
:
final_df = my_df.append(my_df.sum().rename('Total'))
print (final_df)
NY CA Other Total
State
2003 450 50 25 525
2004 300 75 5 380
2005 500 100 100 700
2006 250 50 100 400
Total 1500 275 230 2005
另一种解决方案是将loc
用于setting with enlargement
:
my_df.loc['Total'] = my_df.sum()
print (my_df)
NY CA Other Total
State
2003 450 50 25 525
2004 300 75 5 380
2005 500 100 100 700
2006 250 50 100 400
Total 1500 275 230 2005
上一个答案的另一个想法-将参数margins=True
和margins_name='Total'
添加到crosstab
:
df1 = df.assign(**dct)
out = (pd.crosstab(df1['Firing'], df1['State'], margins=True, margins_name='Total'))