# Buggy code
def append_to_multiple(
    self,
    d: Dict,
    value,
    selector,
    data_columns=None,
    axes=None,
    dropna=False,
    **kwargs,
):
    """
    Append to multiple tables

    Parameters
    ----------
    d : a dict of table_name to table_columns, None is acceptable as the
        values of one node (this will get all the remaining columns)
    value : a pandas object
    selector : a string that designates the indexable table; all of its
        columns will be designed as data_columns, unless data_columns is
        passed, in which case these are used
    data_columns : list of columns to create as data columns, or True to
        use all columns
    dropna : if evaluates to True, drop rows from all tables if any single
             row in each table has all NaN. Default False.

    Notes
    -----
    axes parameter is currently not accepted

    """
    if axes is not None:
        raise TypeError(
            "axes is currently not accepted as a parameter to append_to_multiple; "
            "you can create the tables independently instead"
        )

    if not isinstance(d, dict):
        raise ValueError(
            "append_to_multiple must have a dictionary specified as the "
            "way to split the value"
        )

    if selector not in d:
        raise ValueError(
            "append_to_multiple requires a selector that is in passed dict"
        )

    # figure out the splitting axis (the non_index_axis)
    axis = list(set(range(value.ndim)) - set(_AXES_MAP[type(value)]))[0]

    # figure out how to split the value
    remain_key = None
    remain_values: List = []
    for k, v in d.items():
        if v is None:
            if remain_key is not None:
                raise ValueError(
                    "append_to_multiple can only have one value in d that is None"
                )
            remain_key = k
        else:
            remain_values.extend(v)
    if remain_key is not None:
        ordered = value.axes[axis]
        ordd = ordered.difference(Index(remain_values))
        ordd = sorted(ordered.get_indexer(ordd))
        d[remain_key] = ordered.take(ordd)

    # data_columns
    if data_columns is None:
        data_columns = d[selector]

    # ensure rows are synchronized across the tables
    if dropna:
        idxs = (value[cols].dropna(how="all").index for cols in d.values())
        valid_index = next(idxs)
        for index in idxs:
            valid_index = valid_index.intersection(index)
        value = value.loc[valid_index]

    # append
    for k, v in d.items():
        dc = data_columns if k == selector else None

        # compute the val
        val = value.reindex(v, axis=axis)

        self.append(k, val, data_columns=dc, **kwargs)


# Traceback (ValueError)
store.append_to_multiple({
...     'index': ["IX"],
...     'nums': ["Num", "BigNum", "RandNum"],
...     "strs": ["Str", "LongStr"]
... }, d.iloc[[0]], 'index', min_itemsize={"Str": 10, "LongStr": 100})
Traceback (most recent call last):
File "<pyshell#52>", line 5, in <module>
}, d.iloc[[0]], 'index', min_itemsize={"Str": 10, "LongStr": 100})
File "c:\users\brenbarn\documents\python\extensions\pandas\pandas\io\pytables.py", line 1002, in append_to_multiple
self.append(k, val, data_columns=dc, **kwargs)
File "c:\users\brenbarn\documents\python\extensions\pandas\pandas\io\pytables.py", line 920, in append
**kwargs)
File "c:\users\brenbarn\documents\python\extensions\pandas\pandas\io\pytables.py", line 1265, in _write_to_group
s.write(obj=value, append=append, complib=complib, **kwargs)
File "c:\users\brenbarn\documents\python\extensions\pandas\pandas\io\pytables.py", line 3773, in write
**kwargs)
File "c:\users\brenbarn\documents\python\extensions\pandas\pandas\io\pytables.py", line 3460, in create_axes
self.validate_min_itemsize(min_itemsize)
File "c:\users\brenbarn\documents\python\extensions\pandas\pandas\io\pytables.py", line 3101, in validate_min_itemsize
"data_column" % k)
ValueError: min_itemsize has the key [LongStr] which is not an axis or data_column

# Fixed code
def append_to_multiple(
    self,
    d: Dict,
    value,
    selector,
    data_columns=None,
    axes=None,
    dropna=False,
    **kwargs,
):
    """
    Append to multiple tables

    Parameters
    ----------
    d : a dict of table_name to table_columns, None is acceptable as the
        values of one node (this will get all the remaining columns)
    value : a pandas object
    selector : a string that designates the indexable table; all of its
        columns will be designed as data_columns, unless data_columns is
        passed, in which case these are used
    data_columns : list of columns to create as data columns, or True to
        use all columns
    dropna : if evaluates to True, drop rows from all tables if any single
             row in each table has all NaN. Default False.

    Notes
    -----
    axes parameter is currently not accepted

    """
    if axes is not None:
        raise TypeError(
            "axes is currently not accepted as a parameter to append_to_multiple; "
            "you can create the tables independently instead"
        )

    if not isinstance(d, dict):
        raise ValueError(
            "append_to_multiple must have a dictionary specified as the "
            "way to split the value"
        )

    if selector not in d:
        raise ValueError(
            "append_to_multiple requires a selector that is in passed dict"
        )

    # figure out the splitting axis (the non_index_axis)
    axis = list(set(range(value.ndim)) - set(_AXES_MAP[type(value)]))[0]

    # figure out how to split the value
    remain_key = None
    remain_values: List = []
    for k, v in d.items():
        if v is None:
            if remain_key is not None:
                raise ValueError(
                    "append_to_multiple can only have one value in d that is None"
                )
            remain_key = k
        else:
            remain_values.extend(v)
    if remain_key is not None:
        ordered = value.axes[axis]
        ordd = ordered.difference(Index(remain_values))
        ordd = sorted(ordered.get_indexer(ordd))
        d[remain_key] = ordered.take(ordd)

    # data_columns
    if data_columns is None:
        data_columns = d[selector]

    # ensure rows are synchronized across the tables
    if dropna:
        idxs = (value[cols].dropna(how="all").index for cols in d.values())
        valid_index = next(idxs)
        for index in idxs:
            valid_index = valid_index.intersection(index)
        value = value.loc[valid_index]

    min_itemsize = kwargs.pop("min_itemsize", None)

    # append
    for k, v in d.items():
        dc = data_columns if k == selector else None

        # compute the val
        val = value.reindex(v, axis=axis)

        filtered = (
            {key: value for (key, value) in min_itemsize.items() if key in v}
            if min_itemsize is not None
            else None
        )
        self.append(k, val, data_columns=dc, min_itemsize=filtered, **kwargs)