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

我使用 groupby 和 sum 创建了以下数据框:-


year_month  Country           

2008-01     Afghanistan             2

            Albania                 3

            Argentina               4

2008-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


慕容3067478
浏览 360回答 2
2回答

慕婉清6462132

我认为需要Series.unstack有DataFrame.add_prefix:df = s.unstack().add_prefix('der_value_')print (df)Country     der_value_Afghanistan  der_value_Albania  der_value_Argentinayear_month                                                               2008-01                         2                  3                    42008-02                         3                  4                    5对于index列加DataFrame.rename_axis有DataFrame.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_Argentina0    2008-01                      2                  3                    41    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      42008-02     der_value_Afghanistan    3            der_value_Albania        4            der_value_Argentina      5Name: a, dtype: int64df = s.unstack()print (df)Country     der_value_Afghanistan  der_value_Albania  der_value_Argentinayear_month                                                               2008-01                         2                  3                    42008-02                         3                  4                    5

不负相思意

创造性地使用 MultiIndex 内部结构idx, cols = s.index.levelsi, j = s.index.labelsv = np.zeros((len(idx), len(cols)), dtype=s.dtype)v[i, j] = spd.DataFrame(    np.column_stack([idx, v]),    columns=np.append('year_month', 'der_value_' + cols))  year_month der_value_Afghanistan der_value_Albania der_value_Argentina0    2008-01                     2                 3                   41    2008-02                     3                 4                   5
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python