Pandas Melt 函数:重塑数据框以进行分析
问题:
考虑一个数据框多个列和一个字典:
df = pd.DataFrame([[2, 4, 7, 8, 1, 3, 2013], [9, 2, 4, 5, 5, 6, 2014] ], columns=['艾米', '鲍勃', '卡尔', '克里斯', '本', '其他', '年份'])<br>
d = {'A': ['艾米'], 'B': ['鲍勃', '本'],'C':['卡尔', 'Chris']}<br>
我们如何重塑数据框以类似于以下结构,其中列被熔化和分组?
0 A Amy 2013 2<br> 1 A Amy 2014 9<br> 2 B Bob 2013 4<br> 3 B Bob 2014 2<br> 4 B Ben 2013 1<br> 5 B Ben 2014年5月<br>6℃卡尔 2013 7<br> 7 C 卡尔 2014 4<br> 8 C 克里斯 2013 8<br> 9 C 克里斯 2014 5<br>10 其他 2013 3<br>11 其他 2014 6<br>
答案:
要使用熔化函数重塑数据框,请按照以下步骤操作:
融化数据框:融化数据框使用熔化功能转换为宽格式。这会将列转换为行,并使用 id_vars 参数指定应保持不变的列。
m = pd.melt(df, id_vars=['Year'], var_name='Name')
创建映射字典: 重塑字典 d 创建列名和组之间的映射
d2 = {} for k, v in d.items(): for item in v: d2[item] = k
添加 'Group': 将新创建的字典 d2 映射到 'Name' 列以添加 'Group' 列。
m['Group'] = m['Name'].map(d2)
移动'Other': 将 'Other' 值从 'Name' 列移动到 'Group' 列。
mask = m['Name'] == 'Other' m.loc[mask, 'Name'] = '' m.loc[mask, 'Group'] = 'Other'
生成的数据框将包含所需的扁平结构:
print(m) Year Name value Group 0 2013 Amy 2 A 1 2014 Amy 9 A 2 2013 Bob 4 B 3 2014 Bob 2 B 4 2013 Carl 7 C ... ... ... ... ... 7 2014 Chris 5 C 8 2013 Ben 1 B 9 2014 Ben 5 B 10 2013 3 Other 11 2014 6 Other
以上是如何使用 Melt 函数和字典重塑 Pandas DataFrame?的详细内容。更多信息请关注PHP中文网其他相关文章!