【问题标题】:pandas - add column based on conditionspandas - 根据条件添加列
【发布时间】: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 列以获取未过滤的值,所以我很困惑。

【问题讨论】:

    标签: python pandas dataframe slice


    【解决方案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
        

        【讨论】:

          猜你喜欢
          • 2020-06-09
          • 1970-01-01
          • 1970-01-01
          • 2021-03-02
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-07-21
          • 1970-01-01
          相关资源
          最近更新 更多