Python: преобразование нескольких двоичных столбцов в один категориальный столбец - PullRequest
0 голосов
/ 24 апреля 2018

У меня есть набор данных csv-файла, который содержит 170 столбцов, первые 5 столбцов содержат уникальные идентификаторы (платформа, идентификатор, дата, продолжительность вызова, имя). Остальные столбцы 175 содержат двоичные данные, охватывающие 10 категорий. Я хочу сжать эти столбцы, чтобы количество столбцов в моем фрейме данных составляло 15. Включая приведенный ниже пример:

import pandas as pd

df1 = pd.DataFrame({'Platform': ['Telephone', 'Chat', 'Text'], 'ID': [1, 2, 
3], 'Length': [1545,1532,1511], 'Name': ['andy', 'helen', 'peter'], 'Problem: 
A':[0,1,0], 'Problem: B':[1,0,0], 'Problem: C': [0,0,1], 'Solution: A': 
[0,1,0], 'Solution: B':[1,0,0], 'Solution: C': [0,0,1]})

Вывод:

df.head()

ID  Date        Length\\
1   2015-10-16    1545
2   2015-10-09    1532
3   2015-10-13    1511 

Name Problem: A Problem: B  Problem: C  Solution: A Solution: B Solution: C
andy         0          1           0            0           1           0
helen        1          0           0            1           0           0
peter        0          0           1            0           0           1

Как я хочу, чтобы фрейм данных выглядел:

  Platform ID Length  Name   Problem  Solution
  Telephone 1 1545    andy    B        B
  Chat      2 1532    helen   A        A
  Text      3 1511    peter   C        C

К вашему сведению, это не полный фрейм данных. Всего я бы хотел преобразовать 170 столбцов в 15.

1 Ответ

0 голосов
/ 24 апреля 2018

Вы можете использовать groupby + apply с точечным произведением на столбцах;

df = df.set_index('Name')
df.groupby(df.columns.str.split(':').str[0], axis=1).apply(
    lambda x: x.dot(x.columns.str.split(': ').str[1])
)

      Problem Solution
Name                  
andy        B        B
helen       A        A
peter       C        C
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...