Создание нового столбца путем объединения имени столбца и другого значения столбца

Попытка создать новый столбец в DF1, в котором будет указано количество всех звезд домашних команд за этот год.

DF1

                     Date             Visitor  V_PTS                  Home  H_PTS  \
0 2012-10-30 19:00:00  Washington Wizards     84   Cleveland Cavaliers     94   
1 2012-10-30 19:30:00    Dallas Mavericks     99    Los Angeles Lakers     91   
2 2012-10-30 20:00:00      Boston Celtics    107            Miami Heat    120   
3 2012-10-31 19:00:00    Dallas Mavericks     94             Utah Jazz    113   
4 2012-10-31 19:00:00   San Antonio Spurs     99  New Orleans Pelicans     95   

   Attendance                    Arena                 Location  Capacity  \
0       20562      Quicken Loans Arena          Cleveland, Ohio     20562   
1       18997           Staples Center  Los Angeles, California     18997   
2       20296  American Airlines Arena           Miami, Florida     19600   
3       17634  Vivint Smart Home Arena     Salt Lake City, Utah     18303   
4       15358     Smoothie King Center   New Orleans, Louisiana     16867   

  Yr Arena Opened   Season  
0            1994  2012-13  
1            1992  2012-13  
2            1999  2012-13  
3            1991  2012-13  
4            1999  2012-13 

DF2

                           2012-13  2013-14  2014-15  2015-16  2016-17
Cleveland Cavaliers           1        1        2        1        3
Los Angeles Lakers            2        1        1        1        0
Miami Heat                    3        3        2        2        1
Chicago Bulls                 2        1        2        2        1
Detroit Pistons               0        0        0        1        1
Los Angeles Clippers          2        2        2        1        1
New Orleans Pelicans          0        1        1        1        1
Philadelphia 76ers            1        0        0        0        0
Phoenix Suns                  0        0        0        0        0
Portland Trail Blazers        1        2        2        0        0
Toronto Raptors               0        1        1        2        2

DF1['H_Allstars']=DF2[DF1['Season'],DF1['Home']])

приводит к TypeError: объекты 'Series' изменяемы, поэтому их нельзя хешировать

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

Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
1
0
27
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы можете использовать pandas.melt. Приведите свои данные df2 в длинный формат, то есть Home и Season как столбцы и Allstars как значения, а затем объедините их с df1 в 'Home' и 'Season'.

import pandas as pd
df2['Home'] = df2.index
df2 = pd.melt(df2, id_vars = 'Home', value_vars = ['2012-13',  '2013-14', '2014-15', '2015-16', '2016-17'], var_name = 'Season', value_name='H_Allstars')
df = df1.merge(df2, on=['Home','Season'], how='left') 

Спасибо! Что, если бы я также хотел добавить столбец V_Allstars?

stretchy 02.05.2018 06:44

Не могли бы вы объяснить, что это за столбец?

Aritesh 02.05.2018 07:06

Все готово Ашиш это объяснил

stretchy 02.05.2018 07:31
Ответ принят как подходящий

Я удалил лишние столбцы и сосредоточился только на необходимых для демонстрации.

Вход:

df1

                      Home  2012-13  2013-14  2014-15  2015-16  2016-17
0      Cleveland Cavaliers        1        1        2        1        3
1       Los Angeles Lakers        2        1        1        1        0
2               Miami Heat        3        3        2        2        1
3            Chicago Bulls        2        1        2        2        1
4          Detroit Pistons        0        0        0        1        1
5     Los Angeles Clippers        2        2        2        1        1
6     New Orleans Pelicans        0        1        1        1        1
7       Philadelphia 76ers        1        0        0        0        0
8             Phoenix Suns        0        0        0        0        0
9   Portland Trail Blazers        1        2        2        0        0
10         Toronto Raptors        0        1        1        2        2

df2

              Visitor                  Home   Season
0  Washington Wizards   Cleveland Cavaliers  2012-13
1    Dallas Mavericks    Los Angeles Lakers  2012-13
2      Boston Celtics            Miami Heat  2012-13
3    Dallas Mavericks             Utah Jazz  2012-13
4   San Antonio Spurs  New Orleans Pelicans  2012-13

Шаг 1. Растопите df1, чтобы получить столбец allstars

df3 = pd.melt(df1, id_vars='Home', value_vars = df1.columns[df.columns.str.contains('20')], var_name = 'Season', value_name='H_Allstars')

Выход:

                      Home   Season   H_Allstars
0      Cleveland Cavaliers  2012-13           1
1       Los Angeles Lakers  2012-13           2
2               Miami Heat  2012-13           3
3            Chicago Bulls  2012-13           2
4          Detroit Pistons  2012-13           0
5     Los Angeles Clippers  2012-13           2
6     New Orleans Pelicans  2012-13           0
7       Philadelphia 76ers  2012-13           1
8             Phoenix Suns  2012-13           0
...

Шаг 2. Объедините этот новый фрейм данных с df2, чтобы получить столбцы H_Allstars и V_Allstars.

df4 = pd.merge(df2, df3, how='left', on=['Home', 'Season'])

Выход:

              Visitor                  Home   Season  H_Allstars
0  Washington Wizards   Cleveland Cavaliers  2012-13         1.0
1    Dallas Mavericks    Los Angeles Lakers  2012-13         2.0
2      Boston Celtics            Miami Heat  2012-13         3.0
3    Dallas Mavericks             Utah Jazz  2012-13         NaN
4   San Antonio Spurs  New Orleans Pelicans  2012-13         0.0

Шаг 3. Добавьте столбец V_Allstars

# renaming column as required
df3.rename(columns = {'Home': 'Visitor', 'H_Allstars': 'V_Allstars'}, inplace=True)

df5 = pd.merge(df4, df3, how='left', on=['Visitor', 'Season'])

Выход:

              Visitor                  Home   Season  H_Allstars  V_Allstars
0  Washington Wizards   Cleveland Cavaliers  2012-13         1.0         NaN
1    Dallas Mavericks    Los Angeles Lakers  2012-13         2.0         NaN
2      Boston Celtics            Miami Heat  2012-13         3.0         NaN
3    Dallas Mavericks             Utah Jazz  2012-13         NaN         NaN
4   San Antonio Spurs  New Orleans Pelicans  2012-13         0.0         NaN

Другие вопросы по теме