Преобразование фрейма данных из кум в строку

#python #pandas

Вопрос:

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

Текущий Кадр Данных

Из этого я пытался превратить это в это:

Желаемый кадр Данных

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

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

Еще раз спасибо вам!

 {1: {'Country': 'England', 'Subject Descriptor': 'Real GDP', '2011': '8,248.62', '2012': '8,835.39', '2013': '9,478.98', '2014': '10,224.38', '2015': '11,057.94', '2016': '11,477.97', nan: nan}, 2: {'Country': 'England', 'Subject Descriptor': 'Nom GDP', '2011': '15,158.02', '2012': '17,328.64', '2013': '19,758.15', '2014': '22,504.79', '2015': '25,424.83', '2016': '27,749.64', nan: nan}, 3: {'Country': 'England', 'Subject Descriptor': 'GDP defl', '2011': '183.764', '2012': '196.128', '2013': '208.442', '2014': '220.109', '2015': '229.924', '2016': '241.764', nan: nan}, 4: {'Country': 'Italy', 'Subject Descriptor': 'Real GDP', '2011': '56.524', '2012': '60.712', '2013': '64.55', '2014': '67.025', '2015': '69.893', '2016': '69.322', nan: nan}, 5: {'Country': 'Italy', 'Subject Descriptor': 'Nom GDP', '2011': '122.5', '2012': '136.911', '2013': '152.39', '2014': '163.456', '2015': '172.759', '2016': '178.37', nan: nan}, 6: {'Country': 'Italy', 'Subject Descriptor': 'GDP defl', '2011': '216.722', '2012': '225.509', '2013': '236.082', '2014': '243.873', '2015': '247.176', '2016': '257.306', nan: nan}}
 

Ответ №1:

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

 import pandas as pd
import numpy as np

data = {"Country": ["Subject", "2010", "2011", "2012", "2013", "2014"], "England": [
    "Norm GDP", "8,248.62", "8,835.39", "8,248.62", "8,835.39", "8,248.62"]}
df = pd.DataFrame(data)
print(df)
df_t = df.transpose()
print(df_t)
 

Ввод:

    Country   England
0  Subject  Norm GDP
1     2010  8,248.62
2     2011  8,835.39
3     2012  8,248.62
4     2013  8,835.39
5     2014  8,248.62
 

Выход:

                 0         1         2         3         4         5
Country   Subject      2010      2011      2012      2013      2014
England  Norm GDP  8,248.62  8,835.39  8,248.62  8,835.39  8,248.62
 

Вы можете просто игнорировать фиктивные данные, которые я использовал. Наиболее важной является функция транспонирования. Это математический метод, который может быть применен к матрицам.

PS: В следующий раз, когда будете публиковать вопросы, постарайтесь предоставлять наборы данных в виде текста (вместо изображений), тогда другим будет намного проще протестировать свой код, и вы сможете быстрее получить помощь.

Комментарии:

1. Большое вам спасибо за ваш ответ, я уже использовал это раньше, но это не дает желаемого результата. Чего я хочу, так это чтобы годы шли, а потом повторялись. Например. 2010, 2011, 2012, 2013, 2014, 2010, 2011, 2012, 2013, 2014. Я благодарен вам за то, что вы нашли время, чтобы помочь.

2. @Джеймс ах, хорошо. Если бы вы могли предоставить весь набор данных в виде текста, было бы намного проще предоставить правильное решение.

3. Еще раз здравствуйте, я добавил набор данных в текст, полученный из python, надеюсь, вы сможете мне помочь. Спасибо!