首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >将多个列乘成一列

问将多个列乘成一列
EN

Stack Overflow用户
提问于 2020-10-01 20:46:33
回答 2查看 334关注 0票数 1

我想将大约50,000列与另一列相乘在一个大型dataframe (6_500_000 x 50_002)中。使用for循环的解决方案可以工作,但速度慢得令人痛苦。下面,我尝试了另外两个失败的应用程序。如有任何建议,敬请见谅。

Pandas

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]})
df[['a','b']].multiply(df['c'], axis="index")

Dask

代码语言:javascript
复制
import dask.dataframe as dd
ddf = dd.from_pandas(df, npartitions=1)

# works but very slow for large datasets: 
for column in ['a', 'b']:
    ddf[column] = ddf[column] * ddf['c']

# don't work:
ddf[['a','b']].multiply(ddf['c'], axis="index") 
ddf[['a', 'b']].map_partitions(pd.DataFrame.mul, other=ddf['c'] ).compute()
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2020-10-01 21:03:12

使用.mul对dask:

代码语言:javascript
复制
import pandas as pd
import dask.dataframe as dd
df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]})
ddf = dd.from_pandas(df, npartitions=1)

ddf[['a','b']] = ddf[['a','b']].mul(ddf['c'], axis='index') # or axis=0

ddf.compute()
Out[1]: 
    a   b  c
0   7  28  7
1  16  40  8
2  27  54  9
票数 1
EN

Stack Overflow用户

发布于 2020-10-01 20:55:36

你基本上是为熊猫准备的,只是multiply()还没有到位。我还更改为对除一列之外的所有列使用.loc,这样您就不会键入50,000个列名:)

代码语言:javascript
复制
import pandas as pd
df = pd.DataFrame({'a':[1,2,3], 'b':[4,5,6], 'c':[7,8,9]})
df.loc[:, df.columns != 'c']=df.loc[:, df.columns != 'c'].multiply(df['c'], axis="index")

输出:

代码语言:javascript
复制
    a   b  c
0   7  28  7
1  16  40  8
2  27  54  9

注:我不熟悉达斯克,但我想这是同一个问题的尝试。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64162962

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档