Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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 将所有索引保留在多层次的组中_Python_Pandas_Dataframe_Indexing_Pandas Groupby - Fatal编程技术网

Python 将所有索引保留在多层次的组中

Python 将所有索引保留在多层次的组中,python,pandas,dataframe,indexing,pandas-groupby,Python,Pandas,Dataframe,Indexing,Pandas Groupby,我有以下数据框: df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), [1.1, 1.7, 2.5, 2.6, 3.3, 3.8,4.0,4.2,4.3,4.5,4.6,4.7,4.7,4.8], ['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T df.colum

我有以下数据框:

df = pd.DataFrame([[1.1, 1.1, 1.1, 2.6, 2.5, 3.4,2.6,2.6,3.4,3.4,2.6,1.1,1.1,3.3], list('AAABBBBABCBDDD'), [1.1, 1.7, 2.5, 2.6, 3.3, 3.8,4.0,4.2,4.3,4.5,4.6,4.7,4.7,4.8], ['1','3','3','2','4','2','5','3','6','3','5','1','1','1']]).T
df.columns = ['col1','col2','col3','col4']
当我将其分组时,我得到:

df.groupby(['col4','col2']).sum()

           col1  col3
col4 col2            
1    A      1.1   1.1
     D      5.5  14.2
2    B      6.0   6.4
3    A      4.8   8.4
     C      3.4   4.5
4    B      2.5   3.3
5    B      5.2   8.6
6    B      3.4   4.3
然而,我希望每个一级索引都有相同的二级索引。这是不可能的,因为缺少数据。我希望达到的目标是:

           col1  col3
col4 col2            
1    A      1.1   1.1
     B      0     0
     C      0     0
     D      5.5  14.2
2    A      0     0
     B      6.0   6.4
     C      0     0
     D      0     0
3    A      4.8   8.4
     B      0     0
     C      3.4   4.5
     D      0     0
4    A      0     0
     B      2.5   3.3
     C      0     0
     D      0     0
5    A      0     0
     B      5.2   8.6
     C      0     0
     D      0     0
6    A      0     0
     B      3.4   4.3
     C      0     0
     D      0     0

您可以从数据中创建一个新的
多索引
,以及
重新索引
,如下所示

In [6]: idx = pd.MultiIndex.from_product([df.col4.unique(), df.col2.unique()])

In [9]: (df.groupby(['col4','col2']).sum()
           .reindex(idx).fillna(0))
Out[9]: 
     col1  col3
1 A   1.1   1.1
  B   0.0   0.0
  C   0.0   0.0
  D   5.5  14.2
3 A   4.8   8.4
  B   0.0   0.0
  C   3.4   4.5
  D   0.0   0.0
2 A   0.0   0.0
  B   6.0   6.4
  C   0.0   0.0
  D   0.0   0.0
4 A   0.0   0.0
  B   2.5   3.3
  C   0.0   0.0
  D   0.0   0.0
5 A   0.0   0.0
  B   5.2   8.6
  C   0.0   0.0
  D   0.0   0.0
6 A   0.0   0.0
  B   3.4   4.3
  C   0.0   0.0
  D   0.0   0.0

您可以从数据中创建一个新的
多索引
,以及
重新索引
,如下所示

In [6]: idx = pd.MultiIndex.from_product([df.col4.unique(), df.col2.unique()])

In [9]: (df.groupby(['col4','col2']).sum()
           .reindex(idx).fillna(0))
Out[9]: 
     col1  col3
1 A   1.1   1.1
  B   0.0   0.0
  C   0.0   0.0
  D   5.5  14.2
3 A   4.8   8.4
  B   0.0   0.0
  C   3.4   4.5
  D   0.0   0.0
2 A   0.0   0.0
  B   6.0   6.4
  C   0.0   0.0
  D   0.0   0.0
4 A   0.0   0.0
  B   2.5   3.3
  C   0.0   0.0
  D   0.0   0.0
5 A   0.0   0.0
  B   5.2   8.6
  C   0.0   0.0
  D   0.0   0.0
6 A   0.0   0.0
  B   3.4   4.3
  C   0.0   0.0
  D   0.0   0.0

为了解释缺少的索引,您可能需要对df.groupby(['col4','col2']).sum()返回的数据帧重新编制索引。:


请注意,
unique()
按值在列中出现的顺序返回值(例如,此处“3”出现在“2”之前)。您可以通过在重新编制索引的数据帧上使用
.sortlevel(0)
来更正此问题。

若要解释缺少的索引,您可能需要重新编制由
df.groupby(['col4','col2']].sum()返回的数据帧的索引:

请注意,
unique()
按值在列中出现的顺序返回值(例如,此处“3”出现在“2”之前)。您可以通过在重新索引的数据帧上使用
.sortlevel(0)
来更正此问题