零值的 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 许可协议

阅读 538
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 许可协议

推荐问题