从简单的数据框df
开始,如:
C,n
AAA,1
AAA,2
BBB,1
BBB,2
CCC,1
CCC,2
DDD,1
DDD,2
我想根据C
列中值的某些条件添加一列。我要添加的专栏是:
df['H'] = df['n'] / 10
返回:
C n H
0 AAA 1 0.1
1 AAA 2 0.2
2 BBB 1 0.1
3 BBB 2 0.2
4 CCC 1 0.1
5 CCC 2 0.2
6 DDD 1 0.1
7 DDD 2 0.2
现在我想添加相同的列,但仅针对CCC
列中的值DDD
和C
使用不同的归一化因子,例如:
df['H'] = df['n'] / 100
这样:
C n H
0 AAA 1 0.1
1 AAA 2 0.2
2 BBB 1 0.1
3 BBB 2 0.2
4 CCC 1 0.01
5 CCC 2 0.02
6 DDD 1 0.01
7 DDD 2 0.02
到目前为止,我试图将数据框掩盖为:
mask = df['C'] == 'CCC'
df = df[mask]
df['H'] = df['n'] / 100
这对蒙面样本有效。但是,由于我必须应用多个过滤器,保留原始H
列的未过滤值,我会感到困惑。
答案 0 :(得分:3)
df.loc[df['C'] == 'CCC' , 'H'] = df['n'] / 100
答案 1 :(得分:2)
也可以使用iloc
df.ix[df['C'].isin(['CCC','DDD']),['H']] = df['n'] / 100
答案 2 :(得分:1)
使用this answer中的示例,您可以使用:
df['H'][mask] = df['H'][mask]/100
您还可以单独计算H列(' CCC' /' DDD'或不是' CCC' /' DDD') :
import numpy as np
mask = np.logical_or(df['C'] == 'CCC', df['C']=='DDD')
not_mask = np.logical_not(mask)
df['H'][not_mask] = df['H'][not_mask]/10
df['H'][mask] = df['H'][mask]/100