用于组合dataframe列/行选择和内置函数的Python3语法

用于组合dataframe列/行选择和内置函数的Python3语法,python,numpy,dataframe,series,selectedindex,Python,Numpy,Dataframe,Series,Selectedindex,如何以正确的语法将数据帧的选定行与内置函数组合起来? 关键方程式(有错误)在下面用“***”标记。这个等式有三个方面: (1) 操作仅在数据帧的选定行[lo:hi]和列[ColumnName]上进行 (2) 检查此选择中的NaN条目,并将每个条目设置为(3)定义的随机数 (3) 随机数由库函数np.random.randint和 (a) 值的范围介于(avg+std)和(avg std)之间,总大小=null\u要生成的总[ColumnName]项。 (b) 然后将随机数除以平均值,使值正常化。

如何以正确的语法将数据帧的选定行与内置函数组合起来? 关键方程式(有错误)在下面用“***”标记。这个等式有三个方面: (1) 操作仅在数据帧的选定行[lo:hi]和列[ColumnName]上进行 (2) 检查此选择中的NaN条目,并将每个条目设置为(3)定义的随机数 (3) 随机数由库函数np.random.randint和 (a) 值的范围介于(avg+std)和(avg std)之间,总大小=null\u要生成的总[ColumnName]项。
(b) 然后将随机数除以平均值,使值正常化。 avg和std是[ColumnName]下所有选定行值的平均值和标准偏差,分别由内置数据帧函数.mean和.std计算得出。avg、std和null_total被声明为数据帧类型,尽管它们可能只是系列

def process_Fill_and_Normalize(df,lo,hi,ColumnName):
   avg = pd.DataFrame()
   std = pd.DataFrame()
   null_total = pd.DataFrame()
   avg[ColumnName] = df[ColumnName][lo:hi].mean()
   std[ColumnName] = df[ColumnName][lo:hi].std()
   null_total[ColumnName] = df[ColumnName][lo:hi].isnull().sum()    
   ***df[ColumnName][lo:hi][np.isnan(combined[ColumnName][lo:hi])] = 
   np.random.randint(avg[ColumnName] - std[ColumnName], avg[ColumnName] + 
   std[ColumnName], size=null_total[ColumnName])/avg[ColumnName]
   return df
错误消息如下:

   ValueError: The truth value of a Series is ambiguous. Use a.empty, 
   a.bool(), a.item(), a.any() or a.all().
  /opt/conda/lib/python3.6/site-packages/pandas/core/generic.py in 
  __nonzero__(self)
    915         raise ValueError("The truth value of a {0} is ambiguous. "
    916                          "Use a.empty, a.bool(), a.item(), a.any() or 
    a.all()."
    --> 917                          .format(self.__class__.__name__))
    918 
    919     __bool__ = __nonzero__
如果您能就如何修改语法提出建议,我们将不胜感激

非常感谢hpaulj的回复,他建议打破长期的平衡。索引表达式在单独的方程式中定义。以下修改的代码起作用:

def process_Fill_and_Normalize(df,lo,hi,ColumnName):
   avg = pd.DataFrame()
   std = pd.DataFrame()
   avg[ColumnName] = df[ColumnName][lo:hi].mean()
   std[ColumnName] = df[ColumnName][lo:hi].std()
   null_total[ColumnName] = df[ColumnName][lo:hi].isnull().sum()
   mull_entry_index = np.isnan(combined[ColumnName][lo:hi])
   df[ColumnName][lo:hi][mull_entry_index] = 
     np.random.randint(avg[ColumnName] 
     - std[ColumnName], avg[ColumnName] + std[ColumnName], 
     size=null_total[ColumnName])/avg[ColumnName]
   return df

打破长表情。在简单布尔上下文中使用数组或序列时,会引发此值错误。如果上下文需要标量true/false,但数组有几个值。hpaulj,非常感谢您的建议。按照您的指导,代码现在可以工作了。