首页 > 解决方案 > 如何根据条件在熊猫数据框的多列上分配值

问题描述

我有一个 dtaframe df 如下

df = pd.DataFrame({ 
  'A': [20,30,40,-50,60,-70 ], 
  'B': [21, -19, 20, 18, 17, -21], 
  'C': [1,12,-13,14,15,16], 
  'D': [-88, 92, 9, 70, -6, 78]})

我希望列 ['C','D'] 上的每个值都为零,其中值介于 -10 和 10 之间,其余值应保持不变。

有没有类似的东西data.series.between,可以应用于数据框 df[(df[['C','D']].between(-10,10,inclusive=True)]=0

输出应该是:

    A   B   C   D
0  20  21   0 -88
1  30 -19  12  92
2  40  20 -13   0
3 -50  18  14  70
4  60  17  15   0
5 -70 -21  16  78

标签: pythonpython-3.xpandasdataframe

解决方案


通过and比较后,您可以df.mask()在此处使用:df.gedf.le

df[['C','D']]=df[['C','D']].mask(df[['C','D']].ge(-10)&df[['C','D']].le(10),0)

或者np.where()

df[['C','D']]=np.where(df[['C','D']].ge(-10)&df[['C','D']].le(10),0,df[['C','D']])

    A   B   C   D
0  20  21   0 -88
1  30 -19  12  92
2  40  20 -13   0
3 -50  18  14  70
4  60  17  15   0
5 -70 -21  16  78

推荐阅读