首页 > 解决方案 > 如何将系列属性名称转换为具有相应属性值的标题

问题描述

情况

我有一个数据框attributes,其中包含有关 3 系列汽车的一些属性信息:

attributes = {'brand': ['Honda Civic','Honda Civic','Honda Civic','Toyota Corolla','Toyota Corolla','Audi A4'],
          'attributeName': ['wheels','doors','fuelType','wheels','color','wheels'],
          'attributeValue': ['4','2','hybrid','4','red','4']
        }

预期结果

result = {'brand':   ['Honda Civic','Toyota Corolla','Audi A4'],
          'wheels':  ['4','4','4'],
          'doors':   ['2','',''],
          'fuelType':['hybrid','',''],
          'color':   ['','red','']
         }

我怎么能意识到这一点?

将值从attributeName转换成系列以attributeValue在一行中代表每个品牌/汽车的值。

随着get_dummies我得到这个转换,但只有真/假值而不是原始值。

标签: pythonpandasdataframe

解决方案


这是一个简单的pivot

attributes.pivot(index='brand',
                 columns='attributeName',
                 values='attributeValue').fillna('')

或者,因为您的列的顺序正确,所以更短:

attributes.pivot(*attributes).fillna('')

要将其完全格式化为您提供的输出(列顺序除外,请提供详细信息),您可以使用:

(attributes.pivot(index='brand', columns='attributeName', values='attributeValue')
           .fillna('').rename_axis(None, axis=1)
           .reset_index()
)

输出:

            brand color doors fuelType wheels
0         Audi A4                           4
1     Honda Civic           2   hybrid      4
2  Toyota Corolla   red                     4

推荐阅读