Как группировать по столбцу с Unix time и подсчитать среднее для другого столбца в этой группе?
timestamp,value
1586166810,0
1586166840,0
1586166920,0
1586167120,0
df = pd.read_csv('g.csv')
for index, row in df.iterrows():
prev_data = row['timestamp']
new_data = row['timestamp']
while (new_data - prev_data) <= 3600:
new_data = row['timestamp'] # + 1
continue
# скорее всего - этот момент продуман в pandas как брать блоки данных по условию, но не знаю куда читать.
Даны даты в формате Unix time.
Как группировать по столбцу timestamp по 1 часу и подсчитать среднее по этому часу для столбца value?
Ответы (2 шт):
Автор решения: MaxU
→ Ссылка
Попробуйте так:
In [8]: df = pd.read_csv(r"c:\temp\data.csv")
In [9]: df["timestamp"] = pd.to_datetime(df["timestamp"], unit="s")
In [10]: res = df.groupby(pd.Grouper(key="timestamp", freq="1H"))["value"].mean()
In [11]: res
Out[11]:
timestamp
2020-04-06 09:00:00 0
Freq: H, Name: value, dtype: int64
Автор решения: strawdog
→ Ссылка
Наверное, можно еще и так:
df["timestamp"] = pd.to_datetime(df["timestamp"], unit="s")
df['group_mean'] = df.groupby(df['timestamp'].dt.hour)['value'].transform('mean')
print(df)
результат:
timestamp value group_mean
0 2020-04-06 09:53:30 0 0
1 2020-04-06 09:54:00 0 0
2 2020-04-06 09:55:20 0 0
3 2020-04-06 09:58:40 0 0