我试图从一组行中修改一组列,当然我得到了以下警告:
A value is trying to be set on a copy of a slice from a DataFrame
我看到了一个类似的问题here,但我还是绕不过去。你知道吗
因此,如果我们遵循以下示例代码:
from random import random as rd
ex= pd.DataFrame([{"group": ["a","b"][int(round(rd()))], "colA": rd()*10, "colB": rd()*10, "colC": rd()*10, "colD": rd()*10} for _ in range(20)])
cols = [col for col in ex.columns if col != "group"]
我只想修改属于group a
的行和只属于cols
列的行,对于这些行,我可以直观地尝试一下(并得到警告):
ex[ex["group"]=="a"][cols] = ex[ex["group"]=="a"][cols]/ex.ix[0,cols]
列的数量匹配并且具有相同的标签,所以我想知道是否需要一个接一个地进行如下操作:
for idx in ex[ex["group"]=="a"].index:
for col in cols:
ex.ix[idx, col]=ex.ix[idx, col]/ex.ix[0,col]
这当然管用,但有点像退步。那么,这样做的正确方法是什么呢?你知道吗
IIUC您可以使用
.loc
布尔条件一步完成,并传递列列表:计时
所以在你的小样本上,我的方法比以前快了2倍多,我希望它能更好地适应更大的数据集
相关问题 更多 >
编程相关推荐