【问题标题】:nested if in list/ dataframe with python使用python嵌套在列表/数据框中
【发布时间】:2017-12-19 03:44:04
【问题描述】:

我有一个数据框,其中有 df['kVA']df['Phase'] 列。我正在尝试创建一个列 df['Line'],但具有以下条件:

  1. 逐阶段定义

    df['Line']=['1PH' if x=='1PH' else '3PH' for  x in df['Phase'] ]
    
  2. 逐相定义线和千伏安 - 所需的输出

    df['Line']=['1PH' if x=='1PH' else ['3PHSM' if y<=750 else '3PHLG' for y in df['kVA']] for  x in df['Phase'] ]
    

按阶段定义的代码有效。但是,如果我尝试集成嵌套代码,则代码会停止。我正在尝试按相位和 kVA 特性将产品分类到生产线。 kVA 和 Phase 都是我的数据框中的列(如附件)。

我该如何解决这个问题?

【问题讨论】:

  • 您能否格式化您的问题以符合 SO 标准?
  • 使用按钮{}格式化代码

标签: python list pandas dataframe


【解决方案1】:

Pandas 是一个很棒的工具。我会这样做:

# create some similar data
import pandas as pd
df = pd.DataFrame({'Phase': ['1PH', '3PH', '3PH', '1PH'], 'kVA': [50, 750, 300, 37.5]})

# add a new column (some elements will not change)
df['Line'] = df['Phase']
# modify rows that fit your criteria
df.loc[ (df.kVA < 750) & (df.Phase == '3PH'), 'Line'] += 'SM'
df.loc[ (df.kVA >= 750) & (df.Phase == '3PH'), 'Line'] += 'LG'

.lociloc 非常适合过滤部分数据框。

注意:我正在使用 Pandas v0.20.3 进行此测试。

【讨论】:

    【解决方案2】:

    要以更像大熊猫的方式做到这一点,您可能想要做更多这样的事情:

    one_phase = df['Phase'] == '1PH'
    small = df['kVA'] <= 750
    
    df['Line'][one_phase] = '1PH'
    df['Line'][~one_phase & small] = '3PHSM'
    df['Line'][~one_phase & ~small] = '3PHLG'
    

    注意:您没有留下任何可解析的样本数据,因此未对此进行测试。

    【讨论】:

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