Я хочу выполнить операцию с фреймом данных в Pandas 23.0, но я не могу найти лучший способ сделать это.
Я беру из CSV идентификатор с временем и значением и намереваюсь вычислитьсреднее значение (mean ()
) для каждой из строк.
Example:
id time value
1 22:10:01 10
2 22:10:02 20
3 22:10:03 30
2 22:10:04 40
1 22:10:05 50
It would be something like this:
id time value mean
1 22:10:01 10 10
2 22:10:02 20 20
3 22:10:03 30 30
2 22:10:04 40 30 ((40 + 20) / 2)
1 22:10:05 50 30 ((50 + 10) / 2)
Принимая во внимание, что первым средством будет само значение.
Я пришел к решению, используя вспомогательнуюсловарь:
dat = pd.read_csv ('file.csv')
dicc = {}
for row in dat.itertuples ():
ids = row [1]
values = row [3]
timestamps = row [2]
if ids in dicc
dicc [ids]['id'].append(ids)
dicc [ids]['value'].append(values)
dicc [ids]['mean'].append((dicc[ids]['mean'][- 1]+values)/2)
else:
dicc [ids] = {
'sensor_id': [ids],
'timestamp': [timestamps],
'mean': [values]
df2 = pd.DataFrame.from_dict(data=dicc)
df2.to_csv('file2.csv')
В основном я делаю заполнение словаря, зная, уже появился идентификатор или нет.
Если попытаться создать новый df со средним столбцом, чтобыпротестируйте тайминг:
last=len(datos.columns)
df=pd.DataFrame(data=dat, columns=dat.keys())
df.insert(loc=last, column='mean', value=None)
, но я не могу найти способ сделать этот процесс в кадре данных