#python #pandas
#python #pandas
Вопрос:
У меня есть лист, который выглядит следующим образом.
Управление рисками флота | Информационные материалы | Межличностные отношения | Демографические | Демографические |
---|---|---|---|---|
Q_21086 | Q_21087 | Q_21088 | ВОЗРАСТ | ПОЛ |
1 | 3 | 4 | 27 | Самец |
Чего я пытаюсь добиться, так это того, что внутри нее есть строка с ‘Q_’, объединить эту ячейку с верхней строкой и вернуть новый фрейм данных.
Таким образом, существующие данные выше станут чем-то вроде этого:
Управление рисками флота — Q_21086 | Связь — Q_21087 | Межличностные отношения — Q_21088 |
---|---|---|
1 | 3 | 4 |
Я, честно говоря, понятия не имею, с чего начать что-то подобное.
Комментарии:
1. Может ли быть только 1 или 0 строк с «Q_»?
Ответ №1:
Вы могли бы попробовать это. Это для ввода:
import pandas as pd
df = pd.DataFrame({'Fleet Risk Control': ['Q_21086', 1],
'Communication': ['Q_21087', 3],
'Interpersonal relationships': ['Q_21088', 4],
'Demographic': ['AGE', 27],
'Demographic 2': ['Gender', 'Male']})
Теперь совместите строку заголовка с первой строкой df:
df.columns = df.columns ' - ' df.iloc[0, :]
Извлеките каждую строку без первой и удалите последние оба столбца
df = df.iloc[1:, :-2]
Ответ №2:
# rename columns
df.columns = [x ' - ' y if y.startswith('Q_') else x for x, y in zip(df.columns, df.iloc[0])]
#drop not matching columns
to_drop = [c for c, _ in df.iloc[0].apply(lambda x: not x.startswith('Q_')).items() if _]
df.drop(to_drop, axis=1)[1:]