大熊猫 - 加列基于条件
问题描述:
从简单的数据帧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
现在我想补充的同一列,但只有在C
列值CCC
和DDD
不同的归一化因子,因为,举例来说:
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
列为非过滤值,我感到困惑。
答
df.loc[df['C'] == 'CCC' , 'H'] = df['n']/100
答
使用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
答
能还可以使用ILOC
df.ix[df['C'].isin(['CCC','DDD']),['H']] = df['n']/100