Изменить форму данных из списка в другой файл данных - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть датафрейм с именами и списками, подобными этому:

| Name | value |
|:-----|------:|
| A    |[1,4,7]|
| A    |[9,2,5]|
| A    |[6,9,3]|
| A    |[1,4,7]|
| A    |[9,2,5]|
| B    |[6,9,3]|
| B    |[1,4,7]|
| B    |[9,2,5]|
| B    |[6,9,3]|
| B    |[1,4,7]|

Я хочу переформировать этот фрейм данных в другой фрейм данных, поскольку для всех имен будет 3 таких списка:

| Name |   value   |
|:-----|----------:|
| A    |[1,9,6,1,9]|
| A    |[4,2,9,4,2]|
| A    |[7,5,3,7,5]|
| B    |[6,1,9,6,1]|
| B    |[9,4,2,9,4]|
| B    |[3,7,5,3,7]|

Есть ли какой-нибудь более простой способ сделать это с помощью панд?

Ответы [ 2 ]

0 голосов
/ 13 ноября 2018

Можно, но намного лучшей идеей будет разделить ваши списки на отдельные серии:

res = pd.concat((pd.DataFrame(np.array(grp['value'].tolist()).T.reshape(3, -1))\
                 .assign(Name=key) for key, grp in df.groupby('Name')),
                ignore_index=True)

print(res)

   0  1  2  3  4 Name
0  1  9  6  1  9    A
1  4  2  9  4  2    A
2  7  5  3  7  5    A
3  6  1  9  6  1    B
4  9  4  2  9  4    B
5  3  7  5  3  7    B
0 голосов
/ 13 ноября 2018

Использование groupby + pd.Series + melt

df2 = df.groupby('Name').apply(lambda s: pd.Series([s['value'].str[k].agg(list) for k 
in range(3)])).T.melt()

Фрейм данных выглядит следующим образом:

   Name         value
0   A       [1, 9, 6, 1, 9]
1   A       [4, 2, 9, 4, 2]
2   A       [7, 5, 3, 7, 5]
3   B       [6, 1, 9, 6, 1]
4   B       [9, 4, 2, 9, 4]
5   B       [3, 7, 5, 3, 7]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...