кросс-таблица для заполнения данными другого столбца - PullRequest
0 голосов
/ 26 февраля 2019

Я не прибыл, чтобы заполнить кросс-таблицу данными из другого столбца: возможно, это не решение ...

  initial dataframe              final waited

   id  id_m     X
0  10    10     a
1  10    11     b               id_m  10  11  12
2  10    12     c               id              
3  11    10     d        ->     10    a    b   c
4  11    11     e               11    d    e   f
5  11    12     f               12    g    h   i
6  12    10     g
7  12    11     h
8  12    12     i

мой код, чтобы помочь вам:

import pandas as pd

df= pd.DataFrame({'id': [10, 11,12]})
df_m = pd.merge(df.assign(key=0), df.assign(key=0), suffixes=('', '_m'), on='key').drop('key', axis=1)

# just a sample to populate the column
df_m['X'] =['a','b' ,'c','d', 'e','f','g' ,'h', 'i']

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

С вами немного сложнее, поскольку у вас есть текст values, вы должны явно указать пандам aggfunc, для этого вы можете использовать функцию lambda, например:

df_final = pd.pivot_table(df_m, index='id', columns='id_m', values='X', aggfunc=lambda x: ' '.join(x) )


id_m    10  11  12
id          
10      a   b   c
11      d   e   f
12      g   h   i
0 голосов
/ 26 февраля 2019

Если ваш оригинал df это

   id  id_m  X
0  10    10  a
1  10    11  b
2  10    12  c
3  11    10  d
4  11    11  e
5  11    12  f
6  12    10  g
7  12    11  h
8  12    12  i

И все, что вам нужно, это

id_m 10 11 12
id           
10    a  b  c
11    d  e  f
12    g  h  i

Вы можете groupby столбцы id и id_m,возьмите max столбца X, затем unstack столбец id_m, как этот.

df.groupby([
    'id',
    'id_m'
]).X.max().unstack()

Если вы действительно хотите использовать pivot_table, вы можете сделать это тоже

df.pivot_table(index='id', columns='id_m', values='X', aggfunc='max')

Те же результаты.

Наконец, вы можете использовать только pivot, поскольку ваши строки уникальны по отношению к индексам и столбцам.

df.pivot(index='id', columns='id_m')

Ссылки

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...