pandas - 根据条件添加列
Posted
技术标签:
【中文标题】pandas - 根据条件添加列【英文标题】:pandas - add column based on conditions 【发布时间】:2016-02-03 17:36:12 【问题描述】:从一个简单的数据框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
列以获取未过滤的值,所以我很困惑。
【问题讨论】:
【参考方案1】:使用this answer 中的示例,您可以使用:
df['H'][mask] = df['H'][mask]/100
您也可以根据('CCC'/'DDD' 或不'CCC'/'DDD')分别计算 H 列:
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
【讨论】:
【参考方案2】:df.loc[df['C'] == 'CCC' , 'H'] = df['n'] / 100
【讨论】:
【参考方案3】:可以也可以用iloc
df.ix[df['C'].isin(['CCC','DDD']),['H']] = df['n'] / 100
【讨论】:
以上是关于pandas - 根据条件添加列的主要内容,如果未能解决你的问题,请参考以下文章