如何为 Pandas DataFrame 中的给定索引级别设置值

我正在尝试设置多索引熊猫 DataFrame 中一列的所有值,仅指定单个索引级别的数据。到目前为止我提出的解决方案并不令人满意,但这可能最好用代码来解释:


from pandas import MultiIndex, DataFrame

idx = MultiIndex.from_product([['A', 'B'], [1, 2, 3]],

                              names=['Cases', 'Time'])

parameters = DataFrame(index=idx)

parameters['CaseAndTimeInvariant'] = 1

parameters['CaseAndTimeVariant'] = 1, 2, 3, 4, 5, 6

# Set the values in 'Time' for all cases to 1, 2, 3

parameters['CaseInvariantTimeVariant'] = 1, 2, 3

# ValueError: Length of values does not match length of index

这个错误很明显,因为我没有指定数据应该在哪个级别的任何地方。如果我有另一个“案例”,数据的长度不足以确定我对上面最后一行代码的意思。


我显然需要做的是告诉parameters我传递的数据是针对“时间”索引级别的。但是,我发现的所有使用loc-indexing 的尝试都会导致:


其他全长的 DataFrames 或 Series 或

需要对个别场景进行规范

目前我正在做以下事情:


for c in parameters.index.levels[0]:

    parameters.loc[(c, slice(None)), 'CaseInvariantTimeVariant'] = 1, 2, 3

导致:

虽然这符合我的要求,但在两个方面感觉不满意:

  • 它需要两行相当神秘的行来做一些看似简单的事情:(设置Time使用我给你的这个迭代的所有值!)

  • 我们需要显式迭代所有被处理相同的索引级别,所以这不能很好地推广到两个以上的级别

似乎“groupby”在这里可能会有所帮助,但直到现在我还无法制作大量文档。


慕容708150
浏览 237回答 1
1回答

白板的微信

如果我们总是想将序列与最内层对齐,我们可以:sequence = [1, 2, 3]inner_level = parameters.index.get_level_values(len(parameters.index.levels) - 1)n = inner_level.size // inner_level.nunique()parameters['CaseInvariantTimeVariant'] = sequence * n*请注意,sort在分配序列之前,我们仍然需要索引:parameters.sort_index(inplace=True)。下面如果我们要使用外层:我会sort_index然后只是重复序列的n时间,其中n是唯一索引的长度(Cases在您的数据中)。parameters.sort_index(inplace=True)my_sequence = (1, 2, 3)# below by level: parameters.index.get_level_values(0).nunique()n = parameters.index.get_level_values('Cases').nunique()parameters['CaseInvariantTimeVariant'] = my_sequence * n如果您想要一个始终按最外层索引重复序列的函数:def repeat_seq_by_outer_index(index, sequence):    return sequence * index.get_level_values(0).nunique()repeat_seq_by_outer_index(parameters.index, (1, 2, 3))如果您想要一个始终按nth索引中的级别重复序列的函数:def repeat_seq_by_nth_index(index, level, sequence):    return sequence * index.get_level_values(level).nunique()repeat_seq_by_nth_index(parameters.index, 0, (1, 2, 3))
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python