pandas dataframe 布尔筛选后遇到的坑记录一下。
d1 = pd.DataFrame(np.arange(12).reshape(4,3),columns=list('ABC'))
# 新增一列
d1['D'] = 0
d1为
A B C D
0 0 1 2 0
1 3 4 5 0
2 6 7 8 0
3 9 10 11 0
布尔筛选给d1[‘D’]赋值,
d1[(d1['A']>3) & (d1['A']<10)]['D']=1
d1
输出的d1没有变化,坑是,最开始根据需要变化了一次。没有搞清楚为什么,而且一般重启一下jupyter后会好使一次。
A B C D
0 0 1 2 0
1 3 4 5 0
2 6 7 8 0
3 9 10 11 0
正确方式,使用df.loc函数
d1.loc[(d1['A']>3) & (d1['A']<10),'D']=1
d1
输出为
A B C D
0 0 1 2 0
1 3 4 5 0
2 6 7 8 1
3 9 10 11 1