Python 熊猫根据许多条件添加一些额外的列

Python 熊猫根据许多条件添加一些额外的列,python,pandas,numpy,Python,Pandas,Numpy,我正在从CSV读取数据块,如下所示: for chunk in pd.read_csv(file, chunksize=50000, names = col_names, header = 0, dtype = dtype): chunk['derived_field_1'] = [1 if x == 'High' else -1 for x in chunk['indicator']] 上述操作正常,基于一个条件。我想根据两个字段的条件来做这件事。使值的组合总

我正在从CSV读取数据块,如下所示:

     for chunk in pd.read_csv(file, chunksize=50000, names = col_names, header = 0, dtype = dtype):
           chunk['derived_field_1'] = [1 if x == 'High' else -1 for x in chunk['indicator']]
上述操作正常,基于一个条件。我想根据两个字段的条件来做这件事。使值的组合总数为8。例如

    chunk['derived_field_2'] = [chunk['column_1'] if ((x == 'Red' for x in chunk['Color']) and (y == 'High' for y in chunk['Indicator'])) else
                          chunk['column_2'] if ((x == 'Green' for x in chunk['Color']) and (y == 'Low' for y in chunk['Indicator'])) else 0]
我想做上面的事情,继续使用else条件,再做6个类似上面的条件。这是失败的,两个for循环不工作。我得到这个错误-

raise ValueError('Length of values does not match length of ' 'index')
ValueError: Length of values does not match length of index

有人知道这个错误的原因吗

您可以使用
numpy。其中
用于矢量化解决方案:

import numpy as np
chunk['derived_field_2'] = (np.where((chunk['Color'] == "Red") & (chunk["Indicator"] == "High"), chunk["column_1"], 
   np.where((chunk['Color'] == "Green") & (chunk["Indicator"] == "Low"), chunk["column_2"], 0))

感谢您的回答:)您好,这仍然会引发错误:raise VALUERROR(“值的长度与“”索引的长度不匹配”)VALUERROR:值的长度与索引的长度不匹配。你以前有过这样的经历吗?我将min_itemsize设置为一个更高的数字,但这并没有起作用。我想不出它失败的原因。刚刚在一个小文件上测试过,似乎效果不错。谢谢,我想可能是因为这些专栏中的NaNs吧?我不这么认为。通常,
NaNs
不应该给出这样的错误,这看起来像
len(chunk)
不等于
numpy.where
返回的长度。