Попытка переместить элементы из столбца в ряды, но не выпуклые и не длинные в ширину - PullRequest
0 голосов
/ 10 октября 2018

У меня есть данные, которые выглядят следующим образом.

enter image description here

Я хочу изменить его, чтобы он выглядел следующим образом.

enter image description here

Вот мои примеры данных.

import pandas as pd
data = {'raw_data': ['Severity', 'Severity', 'Severity', 'Severity', 'Manager', 'Manager', 'Manager', 'Manager', 'Incident Category', 'Incident Category' ,'Incident Category', 'Request Category', 'Request Category', 'Request Category', 'Request Category', 'Request Category'], 
        'description': ['3 - Normal',   '4 - Low',  '2 - High', '1 - Urgent',   'Ben',  'Ted',  'Tom',  'Mary', 'UI :: Platform Site',  'Data :: Incomplete Data',  'Front End :: Google.com',  'Add/Remove Subscription',  'Dataset :: Delete  ',  'Dataset :: Create',    'User :: Edit User',    'Company :: Add Company']}
df = pd.DataFrame(data)
print(df)

Я не думаю, что это простое транспонирование, и я не думаю, что это долго и широко.Я не знаю, как это назвать, кроме преобразования.

Я попробовал несколько идей, используя group by, но до сих пор у меня ничего не получилось.

df1['raw_title'] = df1.groupby('ticket_custom_fields_name').cumcount()
df2 = df1['raw_title']
print(df2)

df2 = df1.sort_values('raw_title').groupby('ticket_custom_fields_name').ffill().sort_index()
print(df2)

df3 = df1['ID'] = df1.groupby('ticket_custom_fields_name')['raw_title'].transform('first')
print(df3)

Ответы [ 2 ]

0 голосов
/ 10 октября 2018

Сначала сгруппируйте raw_data и заново создайте кадр данных, затем сдвиньте ячейки вверх

new_df = df.groupby('raw_data').description.apply(pd.DataFrame)
new_df = new_df.apply(lambda x: pd.Series(x.dropna().values)).fillna('')


    Incident Category       Manager Request Category        Severity
0   UI :: Platform Site     Ben     Add/Remove Subscription 3 - Normal
1   Data :: Incomplete Data Ted     Dataset :: Delete       4 - Low
2   Front End :: Google.com Tom     Dataset :: Create       2 - High
3                           Mary    User :: Edit User       1 - Urgent
4                                   Company :: Add Company  
0 голосов
/ 10 октября 2018

Это лучшее, что у меня есть,

aux = df.pivot(columns='raw_data', values='description')
for col_name, data in aux.items(): 
    aux[col_name] = np.roll(aux[col_name], -data.first_valid_index())
aux = aux.dropna(how='all')    

Вывод:

raw_data        Incident Category     ...        Severity
0             UI :: Platform Site     ...      3 - Normal
1         Data :: Incomplete Data     ...         4 - Low
2         Front End :: Google.com     ...        2 - High
3                             NaN     ...      1 - Urgent
4                             NaN     ...             NaN
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...