2017-08-07 71 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