我有一个很大的CSV文件,已将它作为Python数据框以Python格式导入。我做了一个小数据框来解释我的问题。
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()
答案 0 :(得分:1)
发布问题后,我可以找出答案:
s = df.groupby(df.col1).col3.mean().compute()
#s is pandas series
df['col3_mean'] = df['col1'].map(s)
但是,它不适用于我的大型数据框。它永远运行,我必须重新启动计算机。
请告诉我您是否还有其他解决方法
答案 1 :(得分:0)
以下代码适用于我的大数据
agg = df.groupby(['lable']).open_cap.aggregate(["mean"])
agg.columns = ['col3_mean']
df = df.merge(agg.reset_index(), on="lable", how="left")
如果有任何问题,也请添加您对此问题的答案。