【问题标题】:Python create new column conditinal on values of others and usinf those valuesPython根据其他人的值创建新列并使用这些值
【发布时间】:2022-10-14 17:03:41
【问题描述】:

我有一个问题,我想根据其他列的值创建一个新列,然后取另一列的值。

东风:

    Type       Set     Count
1    A          Z        5
2    B          Z        9   
3    B          X        8
4    C          Y        2

我找到了一个类似的解决方案,其中在代码中分配了新的列值(颜色)

df = pd.DataFrame({'Type':list('ABBC'), 'Set':list('ZZXY')})
conditions = [
    (df['Set'] == 'Z') & (df['Type'] == 'A'),
    (df['Set'] == 'Z') & (df['Type'] == 'B'),
    (df['Type'] == 'B')]
choices = ['yellow', 'blue', 'purple']
df['color'] = np.select(conditions, choices, default='black')
print(df)

但是,我希望新列不是颜色列,而是根据这些规则 A&Z=Count 值,B&Z=Count 值,其他所有值 =0;结果如下所示:

    Type       Set     Count    New
1    A          Z        5       5
2    B          Z        9       9
3    B          X        8       0
4    C          Y        2       0

有人可以帮助代码用另一列的值替换颜色部分吗?

谢谢你。

【问题讨论】:

    标签: python pandas numpy


    【解决方案1】:

    我建议也改变条件以获得更友好的东西。 你可以这样做:

    df = pd.DataFrame({
        'Type': ['A', 'B', 'B', 'C'],
        'Set': ['Z', 'Z', 'X', 'Y'],
        'Count': [5, 9, 8, 2]
    })
    conditions = ((df['Type'].isin(['A', 'B'])) & (df['Set'] == 'Z'))
    df['New'] = 0  # or df.loc[~conditions, 'New'] = 0
    df.loc[conditions, 'New'] = df['Count']
    
        Type       Set     Count    New
    1    A          Z        5       5
    2    B          Z        9       9
    3    B          X        8       0
    4    C          Y        2       0
    

    【讨论】:

      【解决方案2】:

      与@ErnestBidouille 类似,您可以复制Count 列的值并使用否定将行替换为0。

      condition = ~(df.Type.isin(['A','B']) & df.Set.isin(['Z']))
      
      df.loc[condition, 'new'] = 0
      

      【讨论】:

        猜你喜欢
        • 2023-03-17
        • 1970-01-01
        • 2021-12-10
        • 1970-01-01
        • 1970-01-01
        • 2021-10-03
        • 2014-12-04
        • 2022-07-05
        相关资源
        最近更新 更多