#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. Это ничего! Я рад помочь 🙂