Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/335.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 - Fatal编程技术网

Python 从现有数据帧创建多索引列数据帧

Python 从现有数据帧创建多索引列数据帧,python,pandas,dataframe,Python,Pandas,Dataframe,我有下面的数据框,每个观察都在一个单独的行上 df = pd.DataFrame({'geo': ['US', 'US', 'US', 'NY', 'NY', 'NY', 'NY', 'CT', 'CT'], 'series': ['a', 'a', 'b', 'a', 'a', 'b', 'b', 'a', 'b'], 'value': [1,2,3,7,4,3,4,12,13], 'date': [

我有下面的数据框,每个观察都在一个单独的行上

df = pd.DataFrame({'geo': ['US', 'US', 'US', 'NY', 'NY', 'NY', 'NY', 'CT', 'CT'], 
              'series': ['a', 'a', 'b', 'a', 'a', 'b', 'b', 'a', 'b'], 
              'value': [1,2,3,7,4,3,4,12,13], 
               'date':  ['3/1', '3/2', '3/1', '3/1', '3/2', '3/1', '3/2', '3/1', '3/2']})

  date geo series  value
0  3/1  US      a      1
1  3/2  US      a      2
2  3/1  US      b      3
3  3/1  NY      a      7
4  3/2  NY      a      4
5  3/1  NY      b      3
6  3/2  NY      b      4
7  3/1  CT      a     12
8  3/2  CT      b     13
我想要的:我想要重新组织数据框架,以便“日期”变量是索引,而geo&series是多索引列变量。即:

     US  US  NY  NY  CT  CT
     a   b   a   b   a   b
3/1  1   3   7   3   12  13
3/2  2  nan  4   4  nan  nan

我尝试的内容:我尝试将索引设置为date、geo、series,然后使用“unstack”,但它会给我一个“重复值”错误。

通常您可以
stack()
unstack()

输出:

geo      US        NY         CT      
series    a    b    a    b     a     b
date                                  
3/1     1.0  3.0  7.0  3.0  12.0   NaN
3/2     2.0  NaN  4.0  4.0   NaN  13.0
由于在三列
日期、地理位置、系列
上存在重复数据,因此会出现重复错误,例如:

date geo series value
 3/1  US      a     1     
 3/1  US      a     2
要确认这一点,请尝试执行以下操作:

df.duplicated(['date','geo','series']).any()
# should give you True
根据您要对副本执行的操作,您可以使用
groupby

# mean:
(df.groupby(['date','geo','series'])
   ['value'].mean()
   .unstack(['geo','series'])
)
# mean:
(df.groupby(['date','geo','series'])
   ['value'].mean()
   .unstack(['geo','series'])
)