如何在熊猫堆叠之前动态重命名列?

use*_*101 2 python pandas

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

year_month  Country           
2008-01     Afghanistan             2
            Albania                 3
            Argentina               4
2008-02     Afghanistan             3
            Albania                 4
            Argentina               5
Run Code Online (Sandbox Code Playgroud)

我需要拆开包装,并希望将名称重命名为der_value_Afghanistan,der_value_Albania等作为列名,而不是阿富汗等。既然可能是100个或更多,是否有什么办法可以全部重命名而不是手动重命名?

year_month der_value_Afghanistan der_value_Albania der_value_Argentina
Run Code Online (Sandbox Code Playgroud)

jez*_*ael 5

我认为需要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
Run Code Online (Sandbox Code Playgroud)

对于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
Run Code Online (Sandbox Code Playgroud)

也可以通过以下方式修改MultiInex之前:unstackMultiIndex.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
Run Code Online (Sandbox Code Playgroud)