按重复顺序为每个多索引设置列的值

Posted

技术标签:

【中文标题】按重复顺序为每个多索引设置列的值【英文标题】:Setting value of a column for each multiindex in repeating order 【发布时间】:2021-05-30 13:58:06 【问题描述】:

我有一个包含 60 个日期的数据框 df,每个日期有 400 个 ID。看起来像这样:

 Date       ID
 2018-01-01   1000
 2018-01-01   1001
 ....
 2018-02-01   1000
 2018-02-01   1001    

现在我想做的是创建第三列。对于给定日期的所有 ID,其值相同。我为此创建了一个单独的单列数据框 df_value,其中包含 60 个按降序排列的随机生成值:

     Value 
     350
     340
     337
     323
     ...

最后应该是这样的:

 Date       ID        Value
 2018-01-01   1000     350
 2018-01-01   1001     350
 ....
 2018-02-01   1000     340
 2018-02-01   1001     340

我尝试使用DateID 作为索引创建一个groupby 数据框,以便稍后在Placeholder 列中添加值。但无法真正弄清楚从那里去哪里:

                     Placeholder
 Date       ID
 2018-01-01   1000       1
 2018-01-01   1001       1
 ....
 2018-02-01   1000       1
 2018-02-01   1001       1

可能 groupby 的想法是死路一条。非常感谢您的帮助。

【问题讨论】:

对不起,我最初应该提到这些值是随机生成的。它们之间的距离并不总是 10。所以我想我必须找到一种方法来引用 df_valueiloc 以某种方式或类似的方式? 【参考方案1】:

GroupBy.ngroupSeries.map 一起使用,df_value 中只有必要的默认索引:

df['new'] = df.groupby('date').ngroup().map(df_value['value'])

【讨论】:

【参考方案2】:

我相信这样的事情可能对你有用:

for i,date in enumerate(df.Date.drop_duplicates()): 
  df.loc[df[df.Date == date].index, 'value'] = value[i]

【讨论】:

以上是关于按重复顺序为每个多索引设置列的值的主要内容,如果未能解决你的问题,请参考以下文章

如何从具有多级重复列的excel表中取消堆叠df?设置多索引?

为多索引 Panda 数据框创建基于另一列的新列

如何应用于具有多索引列的数据框中的一组列

根据其他列的值在多索引数据框中创建新列的简单方法

重命名具有任意顺序和重复列名的多索引列

分配多索引列,同时保留索引级别值的顺序