Как переименовать столбцы динамически, прежде чем unstack в пандах? - PullRequest
0 голосов
/ 03 сентября 2018

У меня есть следующий фрейм данных, созданный с использованием groupby и суммы: -

year_month  Country           
2008-01     Afghanistan             2
            Albania                 3
            Argentina               4
2008-02     Afghanistan             3
            Albania                 4
            Argentina               5

Мне нужно снять стеки и сделать так, чтобы имя было переименовано в der_value_Afghanistan, der_value_Albania и т. Д. В качестве имен столбцов, а не в Афганистан и т. Д. Поскольку это может быть 100 или более, есть ли способ переименовать все это вместе, а не вручную?

year_month der_value_Afghanistan der_value_Albania der_value_Argentina

Ответы [ 2 ]

0 голосов
/ 03 сентября 2018

Творческое использование внутренних элементов 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
0 голосов
/ 03 сентября 2018

Я думаю, что нужно Series.unstack с DataFrame.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_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_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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...