Нахождение среднего значения последовательных данных столбца - PullRequest
0 голосов
/ 12 февраля 2019

У меня есть следующие данные: (данные, приведенные здесь, только для представления)

enter image description here `

Я хочу сделать следующее с этими данными:

  1. Я хочу получить столбец только после 201, т.е. я хочу удалить данные столбца с 200-1 по 200-4.Один из способов сделать это - извлечь только требуемый столбец при чтении данных из Excel, но я хочу знать, как мы можем отфильтровать имя столбца на основе определенного шаблона, так как имя столбца от 200-1 до 200-4 имеет шаблон200 - *

  2. Я хочу создать столбец после 202-4, в котором значения будут храниться следующими способами:

  3. 201q1 = среднее значение(201-1 и 201-2)

  4. 201q2 = среднее значение (201-3 и 201-4)

Аналогично, если с 202-1 по 201-4данные были бы там, аналогичный столбец должен был быть сформирован.

Пожалуйста, помогите.

Заранее спасибо за вашу поддержку.

Ответы [ 2 ]

0 голосов
/ 13 февраля 2019

На шаге 1 вы можете избежать понимания списка и функции удаления панд:

dropcols = [x for x in df.columns if '200-' in x]
df.drop(dropcols, axis=1, inplace=True) 

Шаги 3 и 4 похожи, вы можете рассчитать скользящее среднее для столбцов:

df2 = df.rolling(2, axis = 1).mean() # creates rolling mean
df2.columns = [x.replace('-', 'q') for x in df2.columns] # renames the columns
dfans = pd.concat([df, df2], axis = 1) # concatenate the columns together

Теперь вам нужно просто удалить ненужные столбцы и переименовать их.

0 голосов
/ 13 февраля 2019

Это грубый пример, но он приблизит вас.В примере предполагается, что в каждой группе всегда четыре столбца:

#sample data
np.random.seed(1)
df = pd.DataFrame(np.random.randn(2,12), columns=['200-1','200-2','200-3','200-4', '201-1', '201-2', '201-3','201-4', '202-1', '202-2', '202-3','202-4'])

# remove 200-* columns
df2 = df[df.columns[~df.columns.str.contains('200-')]]

# us np.arange to create groups
new = df2.groupby(np.arange(len(df2.columns))//2, axis=1).mean()

# rename columns
new.columns = [f'{v}{k}' for v,k in zip([x[:3] for x in df2.columns[::2]], ['q1','q2']*int(len(df2.columns[::2])/2))]

# join
df2.join(new)

      201-1     201-2     201-3     201-4     202-1     202-2     202-3  \
0  0.865408 -2.301539  1.744812 -0.761207  0.319039 -0.249370  1.462108   
1 -0.172428 -0.877858  0.042214  0.582815 -1.100619  1.144724  0.901591   

      202-4     201q1     201q2     202q1     202q2  
0 -2.060141 -0.718066  0.491802  0.034834 -0.299016  
1  0.502494 -0.525143  0.312514  0.022052  0.702043 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...