используя фрейм данных panda, как рассчитать среднее значение последовательности данных в файле журнала csv?

#python #pandas #dataframe #csv

#python #pandas #фрейм данных #csv

Вопрос:

Я хочу взять среднее значение последовательности повторяющихся строк. Например,

 a   0.1
b   0.2
c   0.2
a   0.4
b   0.1
c   0.3
a   0.4
b   0.5
c   0.3
 

и я хочу получить следующий результат.

 a   0.300
b   0.267
c   0.267
 

Я смог прочитать файл csv как фрейм данных и отсортировать по индексу столбца, но я хотел бы сохранить последовательность..

Спасибо

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

1. df.groupby('col0')['col1'].mean() ?

2. Спасибо. для ‘col0’ я получаю KeyError: ‘col0’, но это работает. большое вам спасибо. df.groupby(df.columns[0])[df.columns[1]].mean()

3. У меня более двух столбцов. Но group by удаляет другие столбцы. Как мне перевести другой столбец в df2?

4. @RedFox мой ответ касается проблемы объединения всех остальных столбцов. Надеюсь, это поможет 🙂

Ответ №1:

Дополняя @Quang Hoang и ваш комментарий, вы могли бы либо работать с другими столбцами, применяя какую-то агрегацию, например:

 import pandas as pd

df = pd.DataFrame({'col0':["a", "b", "c", "a", "b", "c", "a", "b", "c"],
                   'col1':[0.1, 0.2, 0.2, 0.4, 0.1, 0.3, 0.4, 0.5, 0.3],
                   'col2':[2, 1, 2, 1, 2, 1, 2, 1, 2],
                   'col3':["x","y","z","x","y","z","x","y","z"]})

df2 = df.groupby('col0')[['col1','col2']].mean()

print(df2)
 

Это дает вам:

           col1      col2
col0                    
a     0.300000  1.666667
b     0.266667  1.333333
c     0.266667  1.666667
 

И / или вы могли бы объединить нужные данные с новым фреймом данных. Как что — то вроде этого:

 df2 = df2.merge(df, on='col0', how='left')
 

Давая вам это:

    col0    col1_x    col2_x  col1_y  col2_y col3
0    a  0.300000  1.666667     0.1       2    x
1    a  0.300000  1.666667     0.4       1    x
2    a  0.300000  1.666667     0.4       2    x
3    b  0.266667  1.333333     0.2       1    y
4    b  0.266667  1.333333     0.1       2    y
5    b  0.266667  1.333333     0.5       1    y
6    c  0.266667  1.666667     0.2       2    z
7    c  0.266667  1.666667     0.3       1    z
8    c  0.266667  1.666667     0.3       2    z
 

Но, очевидно, это зависит от того, чего вы пытаетесь достичь.

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

1. Это ничего! Я рад помочь 🙂