迭代和修改 Pandas Dataframe 或 groupby object

Iterating and modifying a Pandas Dataframe or groupby object

我是 Pandas 的新手,正在使用 multi-index 形式的数据集(由 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 object 并创建一个具有我想要的结构的新数据框或者有更好的方法吗?

好的,使用 set_indexunstack 然后 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