Python 熊猫按/透视数据分组,同时一列的条目成为新标签
我想用python+pandas()总结一下发电厂的技术能力 对于此任务,数据必须分组/透视,而“技术”列中的列条目应成为列标签 这是我的意见: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
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
对于AGGRATEsum
和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