我每年使用许多场景来预测产品的需求。我有一个多索引的数据帧(模拟、年、月),需要按其中一个进行过滤(比如模拟)。
import pandas as pd
idx = pd.MultiIndex.from_tuples([(1,2020,1), (1,2020,2), (2,2020,1), (2,2020,2)],
names=['Simulation', 'Year', 'Month'])
d = {'Apples': [1,2,3,4], 'Organes': [4,5,6,8], 'Lemons': [9,10,11,12]}
df = pd.DataFrame(d, index=idx)
print(df)
Simulation Year Month Apples Oranges Lemons
1 2020 1 1 4 9
1 2 2 5 10
2 2020 1 3 6 11
2 2 4 8 12
如何按模拟进行筛选?
仅按模拟编号1进行过滤的预期输出
Simulation Year Month Apples Oranges Lemons
1 2020 1 1 4 9
1 2 2 5 10
假设您要在“模拟”
为 1 的位置编制索引,则可以将index.get_level_values
用作:
df[df.index.get_level_values(0) == 1]
Apples Oranges Lemons
Simulation Year Month
1 2020 1 10 30 10
2 25 50 5
2030 12 30 70 5
对于多个值,您可以在列表中的值末尾添加isin
:
df.loc[df.index.get_level_values(0).isin([1, 2])]
Apples Oranges Lemons
Simulation Year Month
1 2020 1 10 30 10
2 25 50 5
2030 12 30 70 5
2 2020 1 15 25 10
2 20 50 15
get_level_values
基本上是返回一个 Int64Index
,其中包含沿第一个轴的所有索引:
df.index.get_level_values(0)
# Int64Index([1, 1, 1, 2, 2, 50], dtype='int64', name='Simulation')
然后,我们可以使用该结果沿感兴趣的轴对数据帧执行布尔索引。
也可以使用<code>pd.indexlice</code>:
df.loc[pd.IndexSlice[[1,2], :, :]]
Apples Oranges Lemons
Simulation Year Month
1 2020 1 10 30 10
2 25 50 5
2030 12 30 70 5
2 2020 1 15 25 10
2 20 50 15
问题内容: 从这里开始。该解决方案仅适用于一列。如何改进多列解决方案。即如果我有一个像 如何重塑像 如果df是 然后 问题答案: 采用 要么, 另外,索引不相等
问题内容: 我正在寻找一种简洁的方法来过滤特定索引处的列表中的项目。我的示例输入如下所示: 我想在指标筛选出的项目,,,。我有一个for循环,它跳过与索引匹配的项目,但我希望可以有一种使用流的简单方法。最终结果将如下所示: 问题答案: 您可以生成一个模拟原始列表的索引,然后删除列表中的索引,然后将这些索引映射到列表中的相应元素(一种更好的方法是使用for索引,因为它们是唯一的定义,以便进行恒定时间
问题内容: 我有一个数据框 ,它有一 列。我想创建两个新的数据框。一个包含 年份等于的所有行 ,另一个数据框包含 年份不等于的所有行 。我知道您可以这样做,`df.ix[‘2000-1-1’ ‘2001-1-1’]`但是为了获得2000年中没有的所有行,需要创建2个额外的数据帧,然后进行串联/联接。 有这样的办法吗? 这段代码不起作用,但是有什么类似的方法吗? 问题答案: 您可以使用datetim
例如,假设我们有: 如果我这样做: 我总是得到0或1,因为它会搜索与值匹配的第一个匹配项。我如何精确地通过索引引用数组中的元素?也就是说,在这种情况下如何获得“0、1、2、3、4”?或者甚至使用多个维度的数组。
问题内容: 我有一系列元素。我还有一个IndexSet,它指定需要将数组的哪些索引提取到新数组中。例如: 我正在寻找使用swift 函数的方法,但是还没有答案。我怎样才能做到这一点? 问题答案: 是递增整数的集合,因此可以 将 每个索引 映射 到相应的数组元素: 假定所有索引对于给定数组均有效。如果不能保证,则可以过滤索引(如@dfri正确标记):
我正在读取一个文本文件,test.csv,具有给定的内容: 我将一个日期作为参数,它是一个格式为“2020-03-15”的字符串,如果分值为-1,我将尝试获取一个与给定日期相关联的行: 它给出了一个错误,我无法获得与日期“2020-03-08”相关的行。也请考虑我需要将日期列设置为索引。