python - Pandas:使用 Append 添加新列并使另一个全为 NaN

标签 python pandas

我大约一周前才开始学习 pandas,现在我一直在努力使用 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 

我根据数据集制作了此表,其中包含我在此处表示为“状态”的变量的 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创建Series重命名它:

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

关于python - Pandas:使用 Append 添加新列并使另一个全为 NaN,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52696170/

相关文章:

python - 使用列表中的数据以唯一的索引顺序填充 Pandas 数据框?

python - matplotlib 多列条形图,x 轴上有日期

python - 为 Django 模型中的可选字段提供默认值

python - 我正在创建一个 AI 聊天机器人,它反复显示错误 : Expected Bytes, 描述符找到

sql - Pandas reset_index() 创建 level0 列

python pandas 从 0/1 数据帧到项目集列表

python - 如果两个日期时间都存在于 pandas DataFrame 中,则计算两个日期时间之间的差异

python - 当查询返回Null(无对象)时如何在django模板中显示 "nothing found"?

python - 如何在空格上拆分字符串并保留单词的偏移量和长度

python - 为什么 Django 不在 Varnish 代理后面生成 CSRF 或 session Cookie?