Python Pandas 0.18及更高版本。使用Apply ValueError在groupby上发生错误:对象类型<class'pandas.core.series.series'=“”>没有名为1的轴

时间:2018-12-12 17:13:33

标签: python pandas

我正在尝试使用熊猫执行groupby应用操作。 我使用了以下代码:

import pandas as pd
import numpy as np

def test_groupby():
    my_df = pd.DataFrame({'DOG#3M': {'1/1/1999': 0.04825, '1/4/1999': 0.0476, '1/5/1999': 0.0474, '1/6/1999': 0.0476, '1/7/1999': 0.0474},
     'DOG#6M': {'1/1/1999': 0.04751, '1/4/1999': 0.0469, '1/5/1999': 0.0471, '1/6/1999': 0.0473, '1/7/1999': 0.0468,},
     'CAT#3M': {'1/1/1999': 0.05072, '1/4/1999': 0.0501, '1/5/1999': 0.0501, '1/6/1999': 0.0498, '1/7/1999': 0.0497,},
     'FISH#3M': {'1/1/1999': np.nan, '1/4/1999': 0.0161, '1/5/1999': 0.0155, '1/6/1999': 0.01495, '1/7/1999': 0.015, },
     'FISH#6M': {'1/1/1999': 0.0323, '1/4/1999': 0.03223, '1/5/1999': 0.03204, '1/6/1999': 0.03197, '1/7/1999': 0.03179,}})

def getTenorInMos(tenor):
    """
    tenor (string) of the format: \d+[Y|M]
    """

    tenor = tenor.upper()
    if tenor[-1] == 'Y':
        mult = 12
        pass
    elif tenor[-1] == 'M':
        mult = 1
        pass
    else:
        raise KeyError("tenorType[%s] not supported" % tenor[-1])

    return int(tenor[:-1])*mult

import sys
print('Python version',sys.version)
print('pandas version', pd.__version__)
result = my_df.groupby(by=lambda c: c.split('#')[0], axis='columns').apply(
    lambda df:
    pd.DataFrame(df.values, index=df.index,
                     columns=[getTenorInMos(c.split('#', )[-1]) for c in df.columns]).stack()
)

我在以下位置发布此代码: https://github.com/ericksc/pandas_studies

但是我得到了这个错误:         引发ValueError('对象类型为{1}的轴没有命名为{0}'

                   .format(axis, type(self)))
     

E ValueError:对象类型没有轴命名为

在pandas = 0.18.1时,但是当我在pandas = 0.17.1上尝试时,错误消失了,那么我能够得到结果。

我创建了一个毒物测试来描述它 enter image description here

我希望是这样的: enter image description here

有人可以帮助您了解这里发生的事情以及如何处理吗?

0 个答案:

没有答案