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 列中的值CCCDDD 添加相同的列,但使用不同的归一化因子,例如:

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 - 根据条件添加列的主要内容,如果未能解决你的问题,请参考以下文章

pandas根据两个条件设置列值[重复]

使用 else if 逻辑将条件列添加到 Pandas 数据框 - Python

根据其他列向 Panda 数据框添加新列

Pandas:根据现有列向DataFrame添加列

Pandas总结第六节 Pandas 添加列

Pandas:如何根据其他列值的条件对列进行求和?