熊猫:使用Append添加新列,并将所有列都设为NaN

时间:2018-10-08 05:58:03

标签: python pandas

大约一周前,我才刚开始学习熊猫,而现在,我一直在努力研究熊猫数据框。我的数据如下:

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。

有什么办法可以使此格式正确?谢谢您的宝贵时间。

1 个答案:

答案 0 :(得分:2)

我相信您需要通过Seriessum创建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=Truemargins_name='Total'添加到crosstab

df1 = df.assign(**dct)
out = (pd.crosstab(df1['Firing'], df1['State'], margins=True, margins_name='Total'))