如何使用第一列的值作为其他列的标题来扩展一组列?
例如:
x = pd.DataFrame({'id':[11,998,3923], 'count':[7,7,7],
'attributes':['VIS,TEMP,MIN','MIN,VIS,TEMP','MIN,VIS'],
'attribute_values':['0,4,2','2,3,0','0,9'],
'attribute_years':['2000,2001,2002','2001,2002,2003','2008,2009']})
(编辑:请注意,属性可能乱序或丢失。)
在这种情况下,attributes
列值应用于创建带有 attribute_values
的新列和attribute_years
列。
理想输出:
最佳答案
解决方案
将属性中的字符串拆分为分隔符 ,
周围的列,以转换为列表,然后 explode
将列表转换为单独的行,然后 pivot
使用 columns=attributes
进行 reshape ,最后使用 map + join
展平多索引
y = x.set_index(['id', 'count'])
y = y.apply(lambda s: s.str.split(',')).explode([*y])
y = y.pivot(columns='attributes')
y.columns = y.columns.map('_'.join)
y = y.reset_index()
>>> y
id count attribute_values_MIN attribute_values_TEMP attribute_values_VIS attribute_years_MIN attribute_years_TEMP attribute_years_VIS
0 11 7 2 4 0 2002 2001 2000
1 998 7 2 0 3 2001 2003 2002
2 3923 7 0 NaN 9 2008 NaN 2009
关于python - Pandas:宽格式列出的三个列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72306515/