我有一个数据框,我的列df['kVA']
和df['Phase']
。我正在尝试创建列df['Line']
,但符合以下条件:
逐行定义
df['Line']=['1PH' if x=='1PH' else '3PH' for x in df['Phase'] ]
逐行定义& kVa - 期望的输出
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都是我数据框中的列(如附件所示)。
我该如何解决这个问题?
答案 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'
.loc
和iloc
非常适合过滤部分数据框。
注意:我使用Pandas v0.20.3进行此测试。