Как добавить столбец в фрейме данных dask содержит среднее значение значений одного столбца на основе сходства значений в других столбцах - PullRequest
0 голосов
/ 22 января 2019

У меня есть очень большой 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()

Ответы [ 2 ]

0 голосов
/ 22 января 2019

Следующие коды работают для моих больших данных

agg = df.groupby(['lable']).open_cap.aggregate(["mean"])
agg.columns = ['col3_mean']
df = df.merge(agg.reset_index(), on="lable", how="left")

Пожалуйста, добавьте свой ответ на этот вопрос, если у вас есть.

0 голосов
/ 22 января 2019

После размещения моего вопроса, я смог выяснить ответ:

s = df.groupby(df.col1).col3.mean().compute()
#s is pandas series
df['col3_mean'] = df['col1'].map(s)

Однако это не работает для моего большого информационного кадра. Он работает вечно, и я должен перезагрузить компьютер.

Пожалуйста, дайте мне знать, если у вас есть альтернативное решение

...