按重复顺序为每个多索引设置列的值
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
我尝试使用Date
和ID
作为索引创建一个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_value
和 iloc
以某种方式或类似的方式?
【参考方案1】:
将GroupBy.ngroup
与Series.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]
【讨论】:
以上是关于按重复顺序为每个多索引设置列的值的主要内容,如果未能解决你的问题,请参考以下文章