【问题标题】:DataFrame balancing by using reindex使用 reindex 平衡 DataFrame
【发布时间】:2014-12-10 00:57:22
【问题描述】:

我有一个 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

谢谢

【问题讨论】:

  • 索引的值有特殊意义,还是只是一个唯一值?

标签: python pandas reindex


【解决方案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

【讨论】:

  • 谢谢,这太完美了(而且比我想象的要复杂。)我想要所有唯一_ItemId 的联合,我可以通过 df.index.unique() 得到它
  • 很高兴听到它有帮助!
猜你喜欢
  • 1970-01-01
  • 2020-01-05
  • 2018-04-21
  • 1970-01-01
  • 2016-12-09
  • 2020-11-13
  • 1970-01-01
  • 2014-02-04
  • 2016-09-04
相关资源
最近更新 更多