Python 熊猫按/透视数据分组,同时一列的条目成为新标签

Python 熊猫按/透视数据分组,同时一列的条目成为新标签,python,pandas,csv,Python,Pandas,Csv,我想用python+pandas()总结一下发电厂的技术能力 对于此任务,数据必须分组/透视,而“技术”列中的列条目应成为列标签 这是我的意见: Plant Name,Nameplate Capacity,Technology,... Barry,153.1,Natural Gas Steam Turbine,.. Barry,153.1,Natural Gas Steam Turbine,.. Barry,403.7,Conventional Steam Coal,.. Barry,788.8

我想用python+pandas()总结一下发电厂的技术能力

对于此任务,数据必须分组/透视,而“技术”列中的列条目应成为列标签

这是我的意见:

Plant Name,Nameplate Capacity,Technology,...
Barry,153.1,Natural Gas Steam Turbine,..
Barry,153.1,Natural Gas Steam Turbine,..
Barry,403.7,Conventional Steam Coal,..
Barry,788.8,Conventional Steam Coal,..
Barry,195.2,Natural Gas Fired Combined Cycle,..
Barry,195.2,Natural Gas Fired Combined Cycle,..
以及所需的输出:

Plant Name,Natural Gas Steam Turbine,Conventional Steam Coal,Natural Gas Fired Combined Cycle,..
Barry,306.2,1192.5,390.4,..
我尝试了一些命令,但没有成功:

df.groupby(['Plant Name', 'Technology']).sum().pivot('Plant Name', 'Technology').fillna(0)

另一个问题
如何找到每行的最大条目(例如,在我的示例中为“常规动力煤”)作为新列?

我认为需要更改列名称并添加参数
填充值

res = df.pivot_table(index="Plant Name", 
                     columns="Technology", 
                     values="Nameplate Capacity", 
                     aggfunc=np.sum,
                     fill_value=0).reset_index()
print (res)
Technology Plant Name  Conventional Steam Coal  \
0               Barry                   1192.5   

Technology  Natural Gas Fired Combined Cycle  Natural Gas Steam Turbine  
0                                      390.4                      306.2  
对于AGGRATE
sum
和REFORMATE,应使用指定列更改第一个解决方案:

res = (df.groupby(['Plant Name', 'Technology'])['Nameplate Capacity']
         .sum()
         .unstack(fill_value=0)
         .reset_index())
print (res)
Technology Plant Name  Conventional Steam Coal  \
0               Barry                   1192.5   

Technology  Natural Gas Fired Combined Cycle  Natural Gas Steam Turbine  
0                                      390.4                      306.2  

您的参数未对齐到
pd.pivot\u表
。列表示类别标签,而值表示要聚合的数据

此外,您应该使用
'sum'
而不是
np.sum
,因为Pandas经过优化,可以在给定字符串输入的情况下使用适当的ALOGRITHM:

res = df.pivot_table(index='Plant Name', columns='Technology',
                     values='Nameplate Capacity', aggfunc='sum')

print(res)

Technology  Conventional Steam Coal  Natural Gas Fired Combined Cycle  \
Plant Name                                                              
Barry                        1192.5                             390.4   

Technology  Natural Gas Steam Turbine  
Plant Name                             
Barry                           306.2  

如何使用对所有块都相同的多个“索引”列?除了植物名称,我还想种植ID、州等@LuisPaganini-然后将
index=“Plant Name”
更改为
index=[“Plant Name”,“State”]
即使这违反了规则:请你也回答我的第二个问题(我不必再开一个新的)?@LuisPaganini-我觉得很简单,需要
df['top']=df.idxmax(axis=1)
,但是首先删除
.reset\u index()
很抱歉没有得到它:实际的代码行是什么样子?此数据类型不允许还原操作“argmax”
res = df.pivot_table(index='Plant Name', columns='Technology',
                     values='Nameplate Capacity', aggfunc='sum')

print(res)

Technology  Conventional Steam Coal  Natural Gas Fired Combined Cycle  \
Plant Name                                                              
Barry                        1192.5                             390.4   

Technology  Natural Gas Steam Turbine  
Plant Name                             
Barry                           306.2