对于具有带有重复索引的索引列的数据框,我试图按索引获取在不同列中找到的最大值,并将其分配给第三列,以便对于任何给定的行,我们可以看到在具有相同索引的任何行中找到的最大值。 我正在对非常大的数据集进行此操作,并希望将其向量化。现在,我根本无法正常工作
vector
此操作失败,告诉我应该已经使用.loc了。不确定错误的含义,也不确定如何解决此问题,因此不必遍历所有内容,而是可以对其进行矢量化
我正在寻找
sum(rowSums(df[columns] > rep(values, each = length(columns))) == length(columns))
答案 0 :(得分:1)
对于groupby转换来说,这似乎是一个很好的例子,它可以获取每个索引组的最大值并将其转换回其原始索引(而不是分组索引):
multiindexDF['maxValuePerIndex'] = multiindexDF.groupby("theIndex")["theValue"].transform("max")
获得SettingWithCopyWarning
的原因是,在您的.loc
通话中,您正在分割一个切片并在其中设置值,请参见以下两对方括号:< / p>
multiindexDF.loc[matchingIndices]['maxValuePerIndex'] = maxValue
因此,它尝试将值分配给切片而不是原始DataFrame,您正在做一个.loc
,然后在链中后面的另一个[]
。
因此使用您的原始方法:
for i in uniqueIndices:
matchingIndices = multiindexDF['theIndex'] == i
maxValue = multiindexDF.loc[matchingIndices, 'theValue'].max()
multiindexDF.loc[matchingIndices, 'maxValuePerIndex'] = maxValue
(注意,我还更改了第一个.loc
,您在其中错误地使用了布尔索引)