Преобразуйте длинные плоские таблицы (где каждый столбец включает в себя как год, так и категорию) в таблицу, в которой сравниваются категории и годы - PullRequest
1 голос
/ 29 апреля 2019

Я безуспешно пытался создать программу, которая конвертирует CSV с более чем 20 категориями, в которых годы и категории находятся в столбцах, в одну, где они разбиты на строки и столбцы

Как я могу сделать это без необходимости делать это вручную для каждого CSV?

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

кстати.Я делаю это для моей дипломной работы, а не для инвестирования или чего-то в этом роде

Пример данных в настоящее время выглядит

df = pd.DataFrame({
   'Total Revenue 2006' : ['786'],
   'Total Revenue 2007' : ['643'],
   'Total Revenue 2008' : ['1200'],
   'Total Revenue 2009' : ['1456'],
   'Total Revenue 2010' : ['1675'],
   'Total Employees 2006' : ['42'],
   'Total Employees 2007' : ['55'],
   'Total Employees 2008' : ['65'],
   'Total Employees 2009' : ['45'],
   'Total Employees 2010' : ['60'],


Я хочу разделить категории и годы так, чтобы столбцы былитолько годы и строки просто категории

Ответы [ 2 ]

0 голосов
/ 29 апреля 2019

Вы можете попробовать это тоже, хотя и немного длиннее:

transposed_df = df.transpose()
transposed_df.index.name = "Type"
transposed_df.columns = ["Value"]
transposed_df = transposed_df.reset_index()
transposed_df["Year"] = transposed_df.Type.apply(lambda x: x.rsplit(" ", 1)[-1])
transposed_df["Metric"] = transposed_df.Type.apply(lambda x: x.rsplit(" ", 1)[-0])
revenue_df = transposed_df[transposed_df.Metric=="Total Revenue"].set_index("Year")
employee_df = transposed_df[transposed_df.Metric=="Total Employees"].set_index("Year")
revenue_df.drop(["Type", "Metric"], inplace=True, axis=1)
revenue_df.columns = ["Revenue"]
employee_df.drop(["Type", "Metric"], inplace=True, axis=1)
employee_df.columns = ["TotalEmployees"]
combined_df = pd.concat([employee_df, revenue_df], axis=1)
combined_df.head()

    TotalEmployees  Revenue
Year        
2006    42  786
2007    55  643
2008    65  1200
2009    45  1456
2010    60  1675

0 голосов
/ 29 апреля 2019

здесь вы идете

df = df.transpose()
df["temp"] = df.index
df["name"] = df["temp"].map(lambda x: x.rsplit(" ", 1)[0])
df["year"] = df["temp"].map(lambda x: x.rsplit(" ", 1)[1])
df.drop(columns="temp", inplace=True)
result = df.pivot(index='name', columns='year', values=0)

относится к https://pandas.pydata.org/pandas-docs/stable/user_guide/reshaping.html для более

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...