嵌套在带有python的list / dataframe中

时间:2017-12-19 03:44:04

标签: python list pandas dataframe

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

  1. 逐行定义

    df['Line']=['1PH' if x=='1PH' else '3PH' for  x in df['Phase'] ]
    
  2. 逐行定义& kVa - 期望的输出

    df['Line']=['1PH' if x=='1PH' else ['3PHSM' if y<=750 else '3PHLG' for y in df['kVA']] for  x in df['Phase'] ]
    
  3. 按阶段定义的代码有效。但如果我尝试集成嵌套,如果代码停止。我试图按照阶段和kVA特征将产品分类到生产线。 kVA和Phase都是我数据框中的列(如附件所示)。

    我该如何解决这个问题?

    Data frame overview

2 个答案:

答案 0 :(得分:0)

为了在像熊猫这样的大熊猫中做到这一点,你可能想要做更像这样的事情:

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'

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

答案 1 :(得分:0)

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

# 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进行此测试。