У меня есть очень большой CSV-файл, который был импортирован в Python как фрейм данных dask.Я делаю небольшой фрейм данных, чтобы объяснить мой вопрос.
import dask.dataframe as dd
df = dd.read_csv("name and path of the file.csv")
df.head()
вывод:
+----+----+----+----+
|col1|col2|col3|col4|
+----+----+----+----+
| A |2001| 2 | 5 |
+----+----+----+----+
| A |2001| 2 | 4 |
+----+----+----+----+
| A |2001| 3 | 6 |
+----+----+----+----+
| A |2002| 4 | 5 |
+----+----+----+----+
| B |2001| 2 | 9 |
+----+----+----+----+
| B |2001| 2 | 4 |
+----+----+----+----+
| B |2001| 2 | 3 |
+----+----+----+----+
| B |2001| 3 | 95 |
+----+----+----+----+
Я хочу добавить еще один столбец col3_mean
, который содержит среднее значение col3
, если соответствующие значения в col1
совпадают.
+----+----+----+----+---------+
|col1|col2|col3|col4|col3_mean|
+----+----+----+----+---------+
| A |2001| 2 | 5 | 2.75 |
+----+----+----+----+---------+
| A |2001| 2 | 4 | 2.75 |
+----+----+----+----+---------+
| A |2001| 3 | 6 | 2.75 |
+----+----+----+----+---------+
| A |2002| 4 | 5 | 2.75 |
+----+----+----+----+---------+
| B |2001| 2 | 9 | 2.25 |
+----+----+----+----+---------+
| B |2001| 2 | 4 | 2.25 |
+----+----+----+----+---------+
| B |2001| 2 | 3 | 2.25 |
+----+----+----+----+---------+
| B |2001| 3 | 95 | 2.25 |
+----+----+----+----+---------+
Я знаю, что для этой задачи в pandas
мы можем использовать:
df['col3_mean'] = df.groupby(['col1'])['col3'].transform('mean')
Я использовал следующие коды в dask, но он возвращает Nan
значение для col3_mean
df['col3_mean'] = df.groupby(df.col1).col3.mean()
Я также использовал df['index'] = df.groupby(df.lable).col3.mean().collect()
, который не работает.Также следующая строка возвращает только pandas.core.series.Series
df.groupby(df.col1).col3.mean().collect()