Перебирать столбцы, чтобы разрезать набор данных - PullRequest
0 голосов
/ 06 июля 2018

У меня есть следующий набор данных: Столбцы с именами: 2,3,4 ... 9 заполнены названиями тем, которые пересекаются друг с другом. Просмотры страниц - это переменная результата.

        2                           3                       Pageviews
0       Financial Services          Consumer Products       4106.0
1       Consumer Products           ...                     3368.0
2       Consumer Products           ...                     1025.0
3       Collaboration               ...                     7840.0
4       Future of Supply Chains     ...                     2076.0

Я хотел бы разделить каждый столбец темы (2,3, 4, ...) вместе с Pageviews и добавить их так, чтобы создать только один кадр данных с 1 столбцом темы и Pageviews.

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

Я начал с

for x in range(2, 9):
    df_x = df[['Pageviews',  df.x]]

но Python не распознает df.x

Как вы перебираете имена столбцов? И возможно ли использовать итератор для создания новых фреймов данных?

Спасибо!

EDIT

Мой желаемый результат -

                                       Col        Pageviews
0                           Financial Services      4106.0
1                            Consumer Products      3368.0
2                            Consumer Products      1025.0
3                                 Collaboration     7840.0
4                      Future of Supply Chains      2076.0
5                          Future of Reporting      2123.0
6                    Sustainability Management     15576.0
7                                 Human Rights        52.0
8                                      BSR News      903.0
9                       Energy and Extractives      1232.0
10                                  HERproject       616.0
11                   Sustainability Management     10697.0

, где col - результат добавления столбцов 2, 3, 4 ..., а просмотров страниц - результат добавления соответствующих столбцов просмотров страниц.

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

Использование melt

df.melt('Pageviews').drop('variable',1)
Out[644]: 
    Pageviews                 value
0        1210      ConsumerProducts
1        1528         Collaboration
2        1716     FinancialServices
3        1403         Collaboration
4        1090      ConsumerProducts
5        1210      ConsumerProducts
6        1528  FutureofSupplyChains
7        1716      ConsumerProducts
8        1403     FinancialServices
9        1090  FutureofSupplyChains
10       1210     FinancialServices
11       1528     FinancialServices
12       1716         Collaboration
13       1403  FutureofSupplyChains
14       1090     FinancialServices
0 голосов
/ 06 июля 2018

Я думаю, что вы ищете какой-то stack метод, а не итерацию (обычно при работе с фреймами данных итерация является последним средством, так как обычно существует векторизованные методы для достижения большей части реорганизации данных)задачи).

Возьмите пример кадра данных:

>>> df
                    0                        1                        2  \
0   Consumer Products        Consumer Products       Financial Services   
1       Collaboration  Future of Supply Chains       Financial Services   
2  Financial Services        Consumer Products            Collaboration   
3       Collaboration       Financial Services  Future of Supply Chains   
4   Consumer Products  Future of Supply Chains       Financial Services   

   Pageviews  
0       1210  
1       1528  
2       1716  
3       1403  
4       1090  

Вы можете сделать следующее:

new_df = (df.set_index('Pageviews')
          .stack()
          .reset_index(0))

>>> new_df
    Pageviews                        0
0        1210        Consumer Products
1        1210        Consumer Products
2        1210       Financial Services
3        1528            Collaboration
4        1528  Future of Supply Chains
5        1528       Financial Services
6        1716       Financial Services
7        1716        Consumer Products
8        1716            Collaboration
9        1403            Collaboration
10       1403       Financial Services
11       1403  Future of Supply Chains
12       1090        Consumer Products
13       1090  Future of Supply Chains
14       1090       Financial Services
...