Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/325.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果聚合了多行数据,则表aggfunc将忽略类别_Python_Pandas_Dataframe - Fatal编程技术网

Python 如果聚合了多行数据,则表aggfunc将忽略类别

Python 如果聚合了多行数据,则表aggfunc将忽略类别,python,pandas,dataframe,Python,Pandas,Dataframe,我试图使用pandas.pivot_表聚合数据帧,发现在分类系列上聚合多行时,数据帧的行为不同 来自的代码有助于解释(尽管问题与我的不同) 使用分类列设置数据框: import pandas as pd stations = ['Kings Cross Station', 'Newtown Station', 'Parramatta Station', 'Town Hall Station', 'Central Station', 'Circular Quay Stat

我试图使用pandas.pivot_表聚合数据帧,发现在分类系列上聚合多行时,数据帧的行为不同

来自的代码有助于解释(尽管问题与我的不同)

使用分类列设置数据框:

import pandas as pd

stations = ['Kings Cross Station', 'Newtown Station', 'Parramatta Station',
            'Town Hall Station', 'Central Station', 'Circular Quay Station', 
            'Martin Place Station', 'Museum Station', 'St James Station', 
            'Bondi Junction Station', 'North Sydney Station']

df1 = pd.DataFrame({'Station': ['Kings Cross Station', 'Newtown Station', 'Parramatta Station',
                                'Kings Cross Station', 'Newtown Station', 'Parramatta Station',
                                'Kings Cross Station', 'Newtown Station', 'Parramatta Station'],
                    'Date': pd.DatetimeIndex(['1/1/2017', '1/1/2017', '1/1/2017',
                                             '2/1/2017', '2/1/2017', '2/1/2017',
                                             '3/1/2017', '3/1/2017', '3/1/2017',]),
                    'Exit': range(0, 9)})

df1.Station = df1.Station.astype(pd.CategoricalDtype(stations, ordered=True))
如果我用

df1.pivot_table(index = 'Date', columns= 'Station', values = 'Exit', 
                dropna=False, observed=False, aggfunc=len, fill_value=0)
我得到了一个包含所有类别的数据框,其中数据框中没有数据的站点作为列填充0,这就是我想要的:

Station     Kings Cross Station  ...  North Sydney Station
Date                             ...                      
2017-01-01                    1  ...                     0
2017-02-01                    1  ...                     0
2017-03-01                    1  ...                     0
[3 rows x 11 columns]
但是,如果我添加一些具有重复值的行:

df2 = pd.DataFrame({'Station': ['Kings Cross Station', 'Newtown Station', 'Parramatta Station',
                                'Kings Cross Station', 'Newtown Station', 'Parramatta Station'],
                    'Date': pd.DatetimeIndex(['1/1/2017', '1/1/2017', '1/1/2017',
                                             '2/1/2017', '2/1/2017', '2/1/2017']),
                    'Exit': range(0, 6)})
df3 = pd.concat([df1, df2])
。。。和支点

df3.pivot_table(index = 'Date', columns= 'Station', values = 'Exit', 
                dropna=False, observed=False, aggfunc=len, fill_value=0)
现在,
df3
中未表示的站不在轴中:

Station     Kings Cross Station  Newtown Station  Parramatta Station
Date                                                                
2017-01-01                    2                2                   2
2017-02-01                    2                2                   2
2017-03-01                    1                1                   1
我可以通过迭代类别来添加缺少的类别,如果不是在透视表中,我可以添加一列0,但是应该用pandas来完成,当然

我希望这是明确的第一个问题! 多谢各位

这是因为
df2.电台
还不是一个类别。必须应用与对
df1
df2
相同的转换,枢轴才能工作

在concat之前添加此行可以解决此问题:

df2.Station=df2.Station.astype(pd.CategoricalDtype(stations,ordered=True))
df1.dtypes
Station    category      
Date       datetime64[ns]
Exit       int64         
dtype: object

df2.dtypes
Station    object        
Date       datetime64[ns]
Exit       int64         
dtype: object