为了账号安全,请及时绑定邮箱和手机立即绑定

如何在pandas中unstack之前动态重命名列?

如何在pandas中unstack之前动态重命名列?

慕容3067478 2021-06-08 21:18:54
我使用 groupby 和 sum 创建了以下数据框:-year_month  Country           2008-01     Afghanistan             2            Albania                 3            Argentina               42008-02     Afghanistan             3            Albania                 4            Argentina               5我需要取消堆叠并希望将 name 重命名为 der_value_Afghanistan、der_value_Albania 等作为列名而不是阿富汗等。由于它可能是 100 或更多,有没有办法将其全部重命名而不是手动重命名?year_month der_value_Afghanistan der_value_Albania der_value_Argentina
查看完整描述

2 回答

?
慕婉清6462132

TA贡献1804条经验 获得超2个赞

我认为需要Series.unstackDataFrame.add_prefix

df = s.unstack().add_prefix('der_value_')

print (df)

Country     der_value_Afghanistan  der_value_Albania  der_value_Argentina

year_month                                                               

2008-01                         2                  3                    4

2008-02                         3                  4                    5

对于index列加DataFrame.rename_axisDataFrame.reset_index

df = s.unstack().add_prefix('der_value_').rename_axis(None, axis=1).reset_index()

print (df)

  year_month  der_value_Afghanistan  der_value_Albania  der_value_Argentina

0    2008-01                      2                  3                    4

1    2008-02                      3                  4                    5

修改MultiInex前,unstack也可以通过MultiIndex.from_arrays

a = s.index.get_level_values(0)

b = 'der_value_' + s.index.get_level_values(1)

s.index = pd.MultiIndex.from_arrays([a, b], names=s.index.names)

print (s)

year_month  Country              

2008-01     der_value_Afghanistan    2

            der_value_Albania        3

            der_value_Argentina      4

2008-02     der_value_Afghanistan    3

            der_value_Albania        4

            der_value_Argentina      5

Name: a, dtype: int64


df = s.unstack()

print (df)

Country     der_value_Afghanistan  der_value_Albania  der_value_Argentina

year_month                                                               

2008-01                         2                  3                    4

2008-02                         3                  4                    5


查看完整回答
反对 回复 2021-06-09
?
不负相思意

TA贡献1777条经验 获得超10个赞

创造性地使用 MultiIndex 内部结构

idx, cols = s.index.levels

i, j = s.index.labels


v = np.zeros((len(idx), len(cols)), dtype=s.dtype)

v[i, j] = s



pd.DataFrame(

    np.column_stack([idx, v]),

    columns=np.append('year_month', 'der_value_' + cols)

)


  year_month der_value_Afghanistan der_value_Albania der_value_Argentina

0    2008-01                     2                 3                   4

1    2008-02                     3                 4                   5


查看完整回答
反对 回复 2021-06-09
  • 2 回答
  • 0 关注
  • 277 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号