熊猫:使用追加添加新列并使另一个全 NaN



大约一周前我刚开始学习熊猫,现在我一直在为熊猫数据帧而苦苦挣扎。我的数据如下所示:

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 个左右的值。如果它们不是纽约或加利福尼亚州,在示例中,我将它们相加并将它们放在"其他"类别中。这里的年份是根据标准化的日期列表(最初是 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"等是列的实际总数。它在开头添加一列,并将我的"年份"列放在末尾。事实上,它也删除了"日期"标签,并将最后一列中的所有年份转换为 NaN。

有什么方法可以正确格式化吗?谢谢你的时间。

我相信你需要通过sum创建Seriesrename它:

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

相关内容

最新更新