#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']]])