零值的 Pandas groupby

新手上路,请多包涵

我在 csv 文件中有这样的数据

Symbol  Action  Year
  AAPL     Buy  2001
  AAPL     Buy  2001
   BAC    Sell  2002
   BAC    Sell  2002

我能够像这样阅读和分组

df.groupby(['Symbol','Year']).count()

我得到

             Action
Symbol Year
AAPL   2001       2
BAC    2002       2

我想要这个(顺序无关紧要)

              Action
Symbol Year
AAPL   2001       2
AAPL   2002       0
BAC    2001       0
BAC    2002       2

我想知道是否可以算作零次出现

原文由 NinjaGaiden 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 537
2 个回答

您可以将 pivot_tableunstack 一起使用:

 print df.pivot_table(index='Symbol',
                     columns='Year',
                     values='Action',
                     fill_value=0,
                     aggfunc='count').unstack()

Year  Symbol
2001  AAPL      2
      BAC       0
2002  AAPL      0
      BAC       2
dtype: int64

如果您需要输出为 DataFrame 使用 to_frame

 print df.pivot_table(index='Symbol',
                     columns='Year',
                     values='Action',
                     fill_value=0,
                     aggfunc='count').unstack()
                                     .to_frame()
                                     .rename(columns={0:'Action'})

             Action
Year Symbol
2001 AAPL         2
     BAC          0
2002 AAPL         0
     BAC          2

原文由 jezrael 发布,翻译遵循 CC BY-SA 3.0 许可协议

你可以使用这个:

 df = df.groupby(['Symbol','Year']).count().unstack(fill_value=0).stack()
print (df)

输出:

              Action
Symbol Year
AAPL   2001       2
       2002       0
BAC    2001       0
       2002       2

原文由 Joe 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题