Как складывать группы столбцов в и pandas dataframe?

#python #pandas #dataframe

#python #pandas #dataframe

Вопрос:

Я не уверен, как это сделать, но у меня есть фрейм данных, подобный этому,

 State   Homicides  State2   Homicides2
-----------------------------------------
Cal       1         Mas         5
Tex       2         NY          6
Tenn      3         Chi         7 
Pen       4         Mon         8
  

Я хотел бы добавить под «Состоянием» и «Убийствами» столбцы «State2» и «Homicides2»

 State   Homicides  
------------------
Cal       1         
Tex       2        
Tenn      3         
Pen       4         
Mas       5
NY        6
Chi       7 
Mon       8
  

Я пробовал с unlist и stack, но я не знаю, как это сделать для нескольких столбцов,
Спасибо!

Ответ №1:

Вы можете использовать melt() для складывания столбцов по имени

 df.melt(['State','State2'])

    State   State2  variable    value
0   Cal Mas Homicides   1
1   Tex NY  Homicides   2
2   Tenn    Chi Homicides   3
3   Pen Mon Homicides   4
4   Cal Mas Homicides2  5
5   Tex NY  Homicides2  6
6   Tenn    Chi Homicides2  7
7   Pen Mon Homicides2  8
  

Включить drop и rename , чтобы удалить ненужные столбцы и исправить именование

 df.melt(['State','State2']).drop(['State2','variable'], axis=1).rename({'value':'Homicides'}, axis=1)

    State   Homicides
0   Cal     1
1   Tex     2
2   Tenn    3
3   Pen     4
4   Cal     5
5   Tex     6
6   Tenn    7
7   Pen     8
  

Ответ №2:

Давайте используем pd.wide_to_long для обработки этой ситуации одновременного плавления.

Сначала нам нужно переименовать заголовки столбцов, чтобы создать формат, в котором столбцы будут иметь общие «заглушки».

 # Here we are adding '1' on the end of columns without the number 2 on thend
df = df.rename(columns=lambda x: x '1' if x[-1] != '2' else x)

# Now, let's reshape using pd.wide_to_long
pd.wide_to_long(df.reset_index(), ['State', 'Homicides'], 'index', 'No').reset_index(level=1, drop=True)
  

Вывод:

       State  Homicides
index                 
0       Cal        1.0
1       Tex        2.0
2      Tenn        3.0
3       Pen        4.0
0       Mas        5.0
1        NY        6.0
2       Chi        7.0
3       Mon        8.0
  

Ответ №3:

  • Один из способов — использовать pandas.concat , чтобы объединить два набора столбцов
    • Это приведет к складыванию столбцов с одинаковым именем.
  • Используйте .iloc для выбора групп.
    • .iloc использовался, потому что кажется проще выбирать смежные группы столбцов.
    • В качестве альтернативы, выберите столбцы по имени (например df[['State','Homicides']] )
  • Хитрость заключается в том, чтобы .rename столбцы 2-го набора соответствовали именам первого набора столбцов.
 import pandas as pd

# setup test dataframe
df = pd.DataFrame({'State': ['Cal', 'Tex', 'Tenn', 'Pen'], 'Homicides': [1, 2, 3, 4], 'State2': ['Mas', 'NY', 'Chi', 'Mon'], 'Homicides2': [5, 6, 7, 8]})

# concat the 2 sets of columns
df = pd.concat([df.iloc[:, 0:2], df.iloc[:, 2:4].rename(columns={'State2': 'State', 'Homicides2': 'Homicides'})]).reset_index()

display(df)

  State  Homicides
0   Cal          1
1   Tex          2
2  Tenn          3
3   Pen          4
4   Mas          5
5    NY          6
6   Chi          7
7   Mon          8
  

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

1. Спасибо! Я перепробовал все решения, и это подходит идеально

Ответ №4:

Вы можете объединить нужные столбцы:

 result=pd.concat([df[['States','Homicides']], df[['States2','Homicides2']]])