/// <summary>
        /// Performs an element-wise boolean And on each column
        /// </summary>
        public DataFrame And(bool value, bool inPlace = false)
        {
            DataFrame retDataFrame = inPlace ? this : new DataFrame();

            for (int i = 0; i < Columns.Count; i++)
            {
                DataFrameColumn baseColumn = _columnCollection[i];
                DataFrameColumn newColumn  = baseColumn.And(value, inPlace);
                if (inPlace)
                {
                    retDataFrame.Columns[i] = newColumn;
                }
                else
                {
                    retDataFrame.Columns.Insert(i, newColumn);
                }
            }
            return(retDataFrame);
        }
        public DataFrame And(IReadOnlyList <bool> values, bool inPlace = false)
        {
            if (values.Count != Columns.Count)
            {
                throw new ArgumentException(Strings.MismatchedColumnLengths, nameof(values));
            }
            DataFrame retDataFrame = inPlace ? this : new DataFrame();

            for (int i = 0; i < Columns.Count; i++)
            {
                DataFrameColumn baseColumn = _columnCollection[i];
                DataFrameColumn newColumn  = baseColumn.And(values[i], inPlace);
                if (inPlace)
                {
                    retDataFrame.Columns[i] = newColumn;
                }
                else
                {
                    retDataFrame.Columns.Insert(i, newColumn);
                }
            }
            return(retDataFrame);
        }