我是Pandas的新手,正在使用表格的多索引数据集(由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
我该怎么做?迭代dataframe或groupby对象并使用我想要的结构创建一个新的数据框,或者有更好的方法吗?
答案 0 :(得分:1)
好的,使用set_index
和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