SettingWithCopyWarning Triggers Inconsistently Based On Number of Columns
#### Code Sample, a copy-pastable example if possible

```python
import pandas as pd

divider_one = '=' * 75
divider_two = '+' * 75
divider_three = '#' * 75

####################################################################################################
#   There are three declarations for the `base_df_*` DataFrame:
#       one initializes it with two elements then adds one, two, and three more columns; and
#       one initializes it with three elements then adds one, two, and three more columns; and
#       one initializes it with four elements then adds one, two, and three more columns.
#
#   It appears that the `SettingWithcopyWarning` is triggered when a DataFrame with four or more columns is
#   used to derive another DataFrame by slicing and then an attempt is made to add a new column to
#   the derived DataFrame. There is no such warning when the original DataFrame has fewer
#   columns.
#
#   To test this, uncomment the appropriate function to test.
#
####################################################################################################


def test_base_df_with_two_initial_elements():
    base_df_one = pd.DataFrame({
        'col1': ['col1 value one', 'col1 value two', 'col1 value three'],
        'col2': ['col2 value one', 'col2 value two', 'col2 value three'],
    })

    print(divider_one)#                                           This is with a base df w/ 2
    print('Setting the df sub from slice.')
    base_df_one_sub = base_df_one[['col1', 'col2']]
    print('Adding newcol to sub.')
    print('Should be no error.')
    base_df_one_sub['newcol'] = 'values'
    print(divider_one)

    print(divider_two)#                                           This is with a base df w/ 3
    print('Adding col3 to base.')
    base_df_one['col3'] = 'col3 values'
    print('Resetting the df sub from slice.')
    base_df_one_sub = base_df_one[['col1', 'col2']]
    print('Adding newcol to sub.')
    print('Should be no error.')
    base_df_one_sub['newcol'] = 'values'
    print(divider_two)

    print(divider_three)#                                         This is with a base df w/ 4
    print('Adding col4 to base.')
    base_df_one['col4'] = 'col4 values'
    print('Resetting the df sub from slice.')
    base_df_one_sub = base_df_one[['col1', 'col2']]
    print('Adding newcol to sub.')
    print('Should be an error.')
    base_df_one_sub['newcol'] = 'values'
    print(divider_three)


def test_base_df_with_three_initial_elements():
    base_df_one = pd.DataFrame({
        'col1': ['col1 value one', 'col1 value two', 'col1 value three'],
        'col2': ['col2 value one', 'col2 value two', 'col2 value three'],
        'col3': ['col3 value one', 'col3 value two', 'col3 value three'],
    })

    print(divider_one)#                                           This is with a base df w/ 3
    print('Setting the df sub from slice.')
    base_df_one_sub = base_df_one[['col1', 'col2']]
    print('Adding newcol to sub.')
    print('Should be no error.')
    base_df_one_sub['newcol'] = 'values'
    print(divider_one)

    print(divider_two)#                                           This is with a base df w/ 4
    print('Adding col4 to base.')
    base_df_one['col4'] = 'col3 values'
    print('Resetting the df sub from slice.')
    base_df_one_sub = base_df_one[['col1', 'col2']]
    print('Adding newcol to sub.')
    print('Should be an error.')
    base_df_one_sub['newcol'] = 'values'
    print(divider_two)

    print(divider_three)#                                         This is with a base df w/ 5
    print('Adding col5 to base.')
    base_df_one['col5'] = 'col4 values'
    print('Resetting the df sub from slice.')
    base_df_one_sub = base_df_one[['col1', 'col2']]
    print('Adding newcol to sub.')
    print('Should be an error.')
    base_df_one_sub['newcol'] = 'values'
    print(divider_three)


def test_base_df_with_four_initial_elements():
    base_df_one = pd.DataFrame({
        'col1': ['col1 value one', 'col1 value two', 'col1 value three'],
        'col2': ['col2 value one', 'col2 value two', 'col2 value three'],
        'col3': ['col3 value one', 'col3 value two', 'col3 value three'],
        'col4': ['col4 value one', 'col4 value two', 'col4 value three'],
    })

    print(divider_one)#                                           This is with a base df w/ 4
    print('Setting the df sub from slice.')
    base_df_one_sub = base_df_one[['col1', 'col2']]
    print('Adding newcol to sub.')
    print('Should be an error.')
    base_df_one_sub['newcol'] = 'values'
    print(divider_one)

    print(divider_two)#                                           This is with a base df w/ 5
    print('Adding col5 to base.')
    base_df_one['col5'] = 'col3 values'
    print('Resetting the df sub from slice.')
    base_df_one_sub = base_df_one[['col1', 'col2']]
    print('Adding newcol to sub.')
    print('Should be an error.')
    base_df_one_sub['newcol'] = 'values'
    print(divider_two)

    print(divider_three)#                                         This is with a base df w/ 6
    print('Adding col6 to base.')
    base_df_one['col6'] = 'col4 values'
    print('Resetting the df sub from slice.')
    base_df_one_sub = base_df_one[['col1', 'col2']]
    print('Adding newcol to sub.')
    print('Should be an error.')
    base_df_one_sub['newcol'] = 'values'
    print(divider_three)

# Choose which function to test to confirm and uncomment.

# test_base_df_with_two_initial_elements()

# test_base_df_with_three_initial_elements()

# test_base_df_with_four_initial_elements()

```
#### Problem description

It appears that the `SettingWithcopyWarning` is triggered when a DataFrame with four or more columns is used to derive another DataFrame by slicing and then an attempt is made to add a new column to the derived DataFrame. There is no such warning when the original DataFrame has fewer columns.

#### Expected Output

I'm not precisely sure what to expect, but I would imagine that the number of columns in a source DataFrame shouldn't drive a warning against misuse of views of DataFrames. The documentation directs users to use `.loc[]` but only when the warning is issued. If there is potential wonkiness due to setting values from views or copies generally, I'd expect it'd be more helpful when the warning is triggered consistently.

#### Output of ``pd.show_versions()``

<details>

[paste the output of ``pd.show_versions()`` here below this line]
INSTALLED VERSIONS
------------------
commit: None
python: 3.7.3.final.0
python-bits: 64
OS: Windows
OS-release: 10
machine: AMD64
processor: Intel64 Family 6 Model 142 Stepping 10, GenuineIntel
byteorder: little
LC_ALL: None
LANG: en_US.UTF-8
LOCALE: None.None

pandas: 0.24.2
pytest: None
pip: 19.1.1
setuptools: 41.0.1
Cython: None
numpy: 1.16.4
scipy: None
pyarrow: None
xarray: None
IPython: 7.5.0
sphinx: 2.1.0
patsy: None
dateutil: 2.8.0
pytz: 2019.1
blosc: None
bottleneck: None
tables: None
numexpr: None
feather: None
matplotlib: None
openpyxl: None
xlrd: None
xlwt: None
xlsxwriter: None
lxml.etree: None
bs4: None
html5lib: None
sqlalchemy: None
pymysql: None
psycopg2: None
jinja2: 2.10.1
s3fs: None
fastparquet: None
pandas_gbq: None
pandas_datareader: None
gcsfs: None

</details>
