Панды — Усреднение записей в определенной строке и столбце

#python #pandas

Вопрос:

Я импортировал лист Excel, содержащий ряд таблиц. Фрейм данных pandas выглядит следующим образом:

    1   2   3   4    
0  3   2   7   2   
1  4   2   8   1
2  5   1   4   1
3  6   0   2   3
NaN NaN NaN NaN NaN
NaN NaN NaN NaN NaN
   1   2   3   4  
0  3   2   2   1
1  3   3   9   1
2  3   1   5   1
3  2   9   4   1

......
 

Я хотел бы усреднить все значения в каждой соответствующей ячейке (т. Е. средние значения в строке 0, столбец 1 каждой таблицы) , в результате чего получается 1 таблица, содержащая все средние значения.

Я не уверен, как изменить df.groupby(['1']).mean() функцию, чтобы также изолировать ячейки по строкам. Я могу использовать цикл для перебора столбцов, но это может быть сложно сделать и перебирать строки одновременно. Я был бы признателен за любые предложения.

Желаемый результат:

    1   2   3    4    
0  3   2   4.5  1.5   
1  3.5 2.5 8.5  1
2  4   1   4.5  1
3  4   4.5 3    2
 

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

1. не могли бы вы, пожалуйста, добавить пример желаемого результата?

2. @DeanTaler — конечно, я добавил один — это в основном таблица средних значений.

3. Вам это нужно df.groupby(level=0).mean() ? Что такое print (df.info()) ?

4. В каждом фрейме данных есть одинаковые имена столбцов?

5. @jezrael — да, каждая таблица имеет одинаковые имена столбцов и разделена некоторыми строками, которые импортируются как NaN

Ответ №1:

Если первый столбец является индексом, а имена столбцов в каждом подкадре одинаковы, проще всего:

 print (df)
       1    2    3    4
0.0  3.0  2.0  7.0  2.0
1.0  4.0  2.0  8.0  1.0
2.0  5.0  1.0  4.0  1.0
3.0  6.0  0.0  2.0  3.0
NaN  NaN  NaN  NaN  NaN
NaN  NaN  NaN  NaN  NaN
NaN  1.0  2.0  3.0  4.0
0.0  3.0  2.0  2.0  1.0
1.0  3.0  3.0  9.0  1.0
2.0  3.0  1.0  5.0  1.0
3.0  2.0  9.0  4.0  1.0


df = df.groupby(level=0).mean()
print (df)
       1    2    3    4
0.0  3.0  2.0  4.5  1.5
1.0  3.5  2.5  8.5  1.0
2.0  4.0  1.0  4.5  1.0
3.0  4.0  4.5  3.0  2.0
 

Если нет, необходима некоторая предварительная обработка, зависит от данных.

Например, удалите строки, если в последнем столбце есть NaN s, чтобы избежать смешанной строки=1 с индексами=1:

 print (df)
       1    2    3    4
0.0  3.0  2.0  7.0  2.0
1.0  4.0  2.0  8.0  1.0
2.0  5.0  1.0  4.0  1.0
3.0  6.0  0.0  2.0  3.0
NaN  NaN  NaN  NaN  NaN
NaN  NaN  NaN  NaN  NaN
1.0  2.0  3.0  4.0  NaN <- columns names like index=1 here are removed
0.0  3.0  2.0  2.0  1.0
1.0  3.0  3.0  9.0  1.0
2.0  3.0  1.0  5.0  1.0
3.0  2.0  9.0  4.0  1.0


df = df.dropna(subset=df.columns[-1:]).groupby(level=0).mean()
print (df)
       1    2    3    4
0.0  3.0  2.0  4.5  1.5
1.0  3.5  2.5  8.5  1.0
2.0  4.0  1.0  4.5  1.0
3.0  4.0  4.5  3.0  2.0