【问题标题】: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 以某种方式或类似的方式?

标签: python pandas indexing multi-index


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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-07-05
      • 2013-04-22
      • 1970-01-01
      相关资源
      最近更新 更多