对于具有重复索引的索引列的dataframe,我尝试按索引获取在不同列中找到的最大值,并将其分配给第三列,以便对于任何给定行,我们可以看到在具有相同索引的任何行中找到的最大值。 我在一个非常大的数据集上做这件事,如果可能的话,我希望它是矢量化的。现在,我根本无法让它工作
multiindexDF = pd.DataFrame([[1,2,3,3,4,4,4,4],[5,6,7,10,15,11,25,89]]).transpose()
multiindexDF.columns = ['theIndex','theValue']
multiindexDF['maxValuePerIndex'] = 0
uniqueIndicies = multiindexDF['theIndex'].unique()
for i in uniqueIndices:
matchingIndices = multiindexDF['theIndex'] == i
maxValue = multiindexDF[matchingIndices == i]['theValue'].max()
multiindexDF.loc[matchingIndices]['maxValuePerIndex'] = maxValue
这失败了,告诉我应该使用.loc,当我已经在使用它的时候。不确定错误的含义,也不确定如何修复它,这样我就不必遍历所有内容,从而可以将其矢量化
我在找这个
targetDF = pd.DataFrame([[1,2,3,3,4,4,4,4],[5,6,10,7,15,11,25,89],[5,6,10,10,89,89,89,89]]).transpose()
targetDF
看起来这是groupby转换的一个好例子,它可以获得每个索引组的最大值,并将它们转换回原始索引(而不是分组索引):
获取
SettingWithCopyWarning
的原因是,在.loc
调用中,您获取了一个切片并在那里设置了值,请参见中的两对方括号:multiindexDF.loc[matchingIndices]['maxValuePerIndex'] = maxValue
因此,它尝试将值分配给切片而不是原始数据帧,您在链中执行一个
.loc
,然后在它之后执行另一个[]
因此,使用您最初的方法:
(注意,我还更改了第一个
.loc
,您错误地使用了布尔索引)相关问题 更多 >
编程相关推荐