Multi-Index Melt _ Pivot - PullRequest
       6

Multi-Index Melt _ Pivot

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

У меня возникли проблемы с поиском способа изменить мультииндекс (столбцы) df двумя способами: (a) где оба уровня мультииндекса расплавляются, за исключением одного столбца И

(b) гдестолбцы уровня 1 расплавляются для каждого столбца уровня 0

Возможно, я нашел (а), хотя, возможно, не самым программным способом и могу подойти близко, но без сигары на (б)

ДляНапример, с учетом DataFrame:

df = pd.DataFrame({'dealer': {0: 'SF', 1: 'LA'},
                   'col2': {0: 1, 1: 3},
                   'col3': {0: 2, 1: 4},
                   'col4': {0: 3, 1: 6},
                   'col5': {0: 7, 1: 2},
                  })
df.columns = [['Jan','Jan','Feb','Feb','dealer'], ['cars','trucks','cars','trucks','dealer']]

Out[209]: 
   Jan         Feb        dealer
  cars trucks cars trucks dealer
0    1      2    3      7     SF
1    3      4    6      2     LA

Я могу добраться до (a) по:

melted = df.melt(id_vars = 'dealer',col_level=0, var_name='month')
melted['product']=df.melt(id_vars = 'dealer',col_level=1)['variable']
melted.sort_values('dealer', inplace=True)

melted
Out[211]: 
  dealer month  value product
1     LA   Jan      3    cars
3     LA   Jan      4  trucks
5     LA   Feb      6    cars
7     LA   Feb      2  trucks
0     SF   Jan      1    cars
2     SF   Jan      2  trucks
4     SF   Feb      3    cars
6     SF   Feb      7  trucks

, но, похоже, не могу повернуть вправо, чтобы получить ['дилер', 'продукт', 'Jan', 'Feb'] как метки столбцов со значениями в столбцах январь и февраль

pivotedd =  pd.DataFrame({'dealer': {0: 'LA', 1: 'LA',2: 'SF', 3: 'SF'},
                   'product': {0: 'cars', 1: 'trucks',2: 'cars', 3: 'trucks'},
                   'Jan': {0: 3, 1: 4,2:1,3:2},
                   'Feb': {0: 6, 1: 2,2:3,3:7},
                  })

Out[215]: 
   Feb  Jan dealer product
0    6    3     LA    cars
1    2    4     LA  trucks
2    3    1     SF    cars
3    7    2     SF  trucks

Очевидно, я бы хотел, чтобы дилер и товар были первыми столбцами и датами в хронологическом порядке (не читало том, почему pd.dataframe меняет порядок, который вы вводите в данные), но это, по сути, то, что я хочу.

Заранее спасибо!

1 Ответ

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

Вы можете попробовать:

df.set_index('dealer').stack(1).reset_index().rename(columns={'level_1':'product'})

  dealer  product  Feb  Jan
0  (SF,)    cars    3    1
1  (SF,)  trucks    7    2
2  (LA,)    cars    6    3
3  (LA,)  trucks    2    4
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...