将max应用于熊猫数据帧的不同维度子集

时间:2019-02-19 18:25:41

标签: python pandas

对于具有带有重复索引的索引列的数据框,我试图按索引获取在不同列中找到的最大值,并将其分配给第三列,以便对于任何给定的行,我们可以看到在具有相同索引的任何行中找到的最大值。 我正在对非常大的数据集进行此操作,并希望将其向量化。现在,我根本无法正常工作

vector

此操作失败,告诉我应该已经使用.loc了。不确定错误的含义,也不确定如何解决此问题,因此不必遍历所有内容,而是可以对其进行矢量化

我正在寻找

sum(rowSums(df[columns] > rep(values, each = length(columns))) == length(columns))

1 个答案:

答案 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,您在其中错误地使用了布尔索引)