2017-08-07 72 views
1

我是新来的大熊猫,并正与形式的多指标数据集的工作(从GROUPBY制造):迭代和修改熊猫数据帧或GROUPBY对象

Name 
    Year 
     Month 
      Day 
       DataA DataB SpeciesName SpeciesValue 
        A  B   Name1  Value1 
        A  B   Name2  Value2 
        A  B   Name3  Value3 

对于每一个组(唯一名称,年,月,日),只有最后两列具有不同的值,其余列是相同的。我想让每个组包含一行。该行的SpeciesName值将作为列标题和SpeciesValue值作为条目。例如,上述组的结果应该是:

Name 
    Year 
     Month 
      Day 
       DataA  DataB  Name1  Name2  Name3 
        A   B  Value1 Value2 Value3 

我该怎么做呢?迭代通过数据框或groupby对象,并创建一个新的数据框与我想要的结构或有更好的方法吗?

+0

也许你可以试试'df.set_index('SpeciesName')。unstack('SpeciesName')' – heyu91

+0

Blake,是我们的行索引MultiIndex还是你的列索引? –

+0

@ScottBoston行被multiindexed – urandom

回答

1

好,使用​​和unstack然后reset_index

df = pd.DataFrame({'Name':['Blake']*3,'Year':[2017]*3, 
        'Month':[1]*3, 
        'Day':[15]*3, 
        'DataA':['A']*3, 
        'DataB':['B']*3, 
        'SpeciesName':['Name1','Name2','Name3'], 
        'SpeciesValue':['Value1','Value2','Value3']}) 

df = df.set_index(['Name','Year','Month','Day']) 

df 

样品输入数据帧:

     DataA DataB SpeciesName SpeciesValue 
Name Year Month Day          
Blake 2017 1  15  A  B  Name1  Value1 
       15  A  B  Name2  Value2 
       15  A  B  Name3  Value3 

现在,让我们重塑数据框:

df_out = df.set_index(['DataA','DataB','SpeciesName'],append=True)['SpeciesValue']\ 
    .unstack()\ 
    .reset_index(level=[-1,-2]) 

print(df_out) 

输出:

SpeciesName   DataA DataB Name1 Name2 Name3 
Name Year Month Day          
Blake 2017 1  15  A  B Value1 Value2 Value3 
+0

谢谢,我会所需的数据不会是SpeciesName下就像它在你的输出。然而,你的回答让我看到了一些以前错过了能够使用的熊猫功能。我会发布我所做的,你可以让我知道你的想法。再次感谢你的帮助! – urandom