DataFrame使用reindex进行平衡

时间:2014-12-09 16:20:19

标签: python pandas reindex

我有一个DataFrame,其索引名为_ItemId和_ChannelId列,以及下面简化为_SomeValue的其他值列。我想将DataFrame转换为每个_Channel模态具有完全相同的_ItemId元素(我将其称为“平衡”,就像在面板数据中一样)。

在下面的示例中,在我想要的df中,插入了3行,其中包含Nan值以平衡DataFrame。

我以为我会使用reindex()函数,但我不确定如何创建我需要插入缺少元素的索引。任何建议都非常赞赏。

我有什么:

       _ChannelId  _SomeValue
_ItemId                 
6559085   MICRO    AA
6589413   MICRO    AB
6589421   MICRO    AA
6781144   MICRO    AC
8184089   MICRO    AA
6559085  WILSON    AA
6589413  WILSON    AC

我想要的是什么:

       _ChannelId  _SomeValue
_ItemId                 
6559085   MICRO    AA
6589413   MICRO    AB
6589421   MICRO    AA
6781144   MICRO    AC
8184089   MICRO    AA
6559085  WILSON    AA
6589413  WILSON    AC
6589421  WILSON    NaN
6781144  WILSON    NaN
8184089  WILSON    NaN

由于

1 个答案:

答案 0 :(得分:1)

首先获取您要作为参考的组的索引,例如:

idx = df.groupby('_ChannelId').groups['MICRO']

可能是你想要联合,唯一索引,第一组索引等,问题中没有明确规定。然后你可以这样做:

df.groupby('_ChannelId')\
  .apply(lambda x: x.reindex(idx))\
  .drop('_ChannelId', axis=1)\
  .reset_index('_ChannelId')

        _ChannelId  _SomeValue
_ItemId     
6559085 MICRO      AA
6589413 MICRO      AB
6589421 MICRO      AA
6781144 MICRO      AC
8184089 MICRO      AA
6559085 WILSON     AA
6589413 WILSON     AC
6589421 WILSON     NaN
6781144 WILSON     NaN
8184089 WILSON     NaN