Pandas: объединить две строки, если строка содержит определенную строку

#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:]