python - 将分类值转换为 Pandas 中的列

标签 python pandas

我需要将分类行转换为单独的列,同时保留数据中的主键。

在数据中,所有有用的属性都位于 2 列中(attribute_name 和 attribute_value)。我想将 attribute_name 中的行转换为单独的列,并使用 attribute_value 列中的相应数据填充它们(如下图所示)。

注意:并非所有的part_id都具有相同的属性名称或已填充它们。转换后,某些part_ids在新列中将缺少值。

我尝试了pandas unstack() 和pivot() 函数,但它们还将platform_id 和part_id 值转换为列。

下面的代码最接近我的要求,但它为每个part_id创建了重复的列,并且我无法在保留诸如platform_id和part_id之类的主键的同时进行此转换:

df[['attribute_name', attribute_value']].set_index('attribute_name').T.rename_axis(None axis=1).reset_index(drop=True)

添加代码以重新创建数据框:

data = {'Platform_id':[4356, 4356, 4356, 23675, 23675, 23675, 772, 772],\

    'part_id':['XCVT43', 'XCVT43', 'XCVT43', 'TT3344', 'TT3344', 'TT3344', 'GHTYW2', 'GHTYW2'], \

    'class_id':['PROCESSOR', 'PROCESSOR','PROCESSOR','PROCESSOR','PROCESSOR','PROCESSOR','PROCESSOR','PROCESSOR',], \

    'attribute_name': ['Vendor_name', 'Cache', 'Clock-speed', 'Vendor_name', 'Model_name', 'Clock-speed', 'Vendor_name', 'Cache'], \

    'attribute_value': ['Intel', '4', '3.1', 'Intel', '4500U', '2.3', None, '4']}



df = pd.DataFrame(data)

data transformation before and after

最佳答案

您可以使用:

vendors=df['attribute_name'].unique()
df2=pd.concat([df.set_index(['Platform_id','part_id','class_id']).groupby('attribute_name')['attribute_value'].get_group(key) for key in vendors],axis=1)
df2.columns=vendors
df2.reset_index(inplace=True)
print(df2)



   Platform_id part_id   class_id Vendor_name Cache Clock-speed Model_name
0          772  GHTYW2  PROCESSOR        None     4         NaN        NaN
1         4356  XCVT43  PROCESSOR       Intel     4         3.1        NaN
2        23675  TT3344  PROCESSOR       Intel   NaN         2.3      4500U

关于python - 将分类值转换为 Pandas 中的列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58044972/

相关文章:

python - Eclipse + PyDev 导入错误

python - urllib.error.URLError : <urlopen error no host given> python 3

python - 为什么我不能解码这个 UTF-8 页面?

python - 如何使用 pandas datetime 将数字转换为日期(通过使用这些数字作为距今天日期的距离)

python - Pandas 中 Series.add 功能的更快替代品

python - 循环遍历python中的特定文件

java - 如何在Java和C#中获取定义的元素之前和之后的所有元素

python - 添加重复序列值的列

python - 将不同长度的列添加到 Pandas 数据框中

python - 比较 2 个数据框中每列有多少个不同值