Объединить строки со столбцами в разных форматах панд - PullRequest
0 голосов
/ 23 мая 2018

У меня есть фрейм данных, где у меня n столбцов с одинаковым заголовком, например.Продажи, Продажи 1, Продажи 2 и т. Д.

И данные представляют собой строки из нескольких записей, причем столбец с идентификатором и столбец идентификатора имеет повторяющиеся значения.

В столбце «Продажи» в первой строке указывается месяц, например, январь, февраль и т. Д. Для продаж «Продажи 1» соответственно

Sales      Sales1     Sales2
Jan 2000  Feb 2000   Month 2000
2000       3000       4000

Я отфильтровал столбец «Продажи» в кадре данных

sales_df= df.filter(regex=('Sales*'))

Теперь я хочу объединить это с другими записями, но я хочу объединить его со столбцами, такими как SalesMonth SalesValue, где я преобразую данные в январь 2000 г., февраль 3000 и т. Д.

Вывод, который я получаю, -

X     Y   ID SalesMonth Sales
xxx yyyy 001 Jan 2000   2000

РЕДАКТ. 1: Входной файл

ID    Desc       Sales      Sales1     Sales2
                 Month     Month      Month
                 Jan 2000  Feb 2000   Month 2000
 1    Desc1      10         20         30
 1    Desc1      11         21         31
 2    Desc2      7          Nan         0
 3    Desc3     10         20          10 

1 Ответ

0 голосов
/ 23 мая 2018

Сначала необходимо создать MultiIndex в столбцах, затем изменить их на unstack и в последнем reset_index:

print (df)
      Sales    Sales1      Sales2
0  Jan 2000  Feb 2000  Month 2000
1      2000      3000        4000
2      7000      8000        3000

#MultiIndex by first row
df.columns = [df.columns, df.iloc[0]]
#remove first row by indexing - [1:]
df = df.iloc[1:].unstack().reset_index(name='val')
df.columns = ['a','b','c','val']
print (df)
        a           b  c   val
0   Sales    Jan 2000  0  2000
1   Sales    Jan 2000  1  7000
2  Sales1    Feb 2000  0  3000
3  Sales1    Feb 2000  1  8000
4  Sales2  Month 2000  0  4000
5  Sales2  Month 2000  1  3000

Если ввод file лучше использовать параметр header для MultiIndex:

import pandas as pd

temp=u"""Sales;Sales1;Sales2
Jan 2000;Feb 2000;Month 2000
2000;3000;4000
7000;8000;3000"""
#after testing replace 'pd.compat.StringIO(temp)' to 'filename.csv'
df = pd.read_csv(pd.compat.StringIO(temp), sep=';',header=[0,1])
print (df)

     Sales   Sales1     Sales2
  Jan 2000 Feb 2000 Month 2000
0     2000     3000       4000
1     7000     8000       3000

print (df.columns)
MultiIndex(levels=[['Sales', 'Sales1', 'Sales2'], ['Feb 2000', 'Jan 2000', 'Month 2000']],
           labels=[[0, 1, 2], [1, 0, 2]])

df = df.unstack().reset_index(name='val')
df.columns = ['a','b','c','val']
print (df)
        a           b  c   val
0   Sales    Jan 2000  0  2000
1   Sales    Jan 2000  1  7000
2  Sales1    Feb 2000  0  3000
3  Sales1    Feb 2000  1  8000
4  Sales2  Month 2000  0  4000
5  Sales2  Month 2000  1  3000
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...