我想将大约50,000列与另一列相乘在一个大型dataframe (6_500_000 x 50_002)中。使用for循环的解决方案可以工作,但速度慢得令人痛苦。下面,我尝试了另外两个失败的应用程序。如有任何建议,敬请见谅。
Pandas
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
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()发布于 2020-10-01 21:03:12
使用.mul对dask:
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发布于 2020-10-01 20:55:36
你基本上是为熊猫准备的,只是multiply()还没有到位。我还更改为对除一列之外的所有列使用.loc,这样您就不会键入50,000个列名:)
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")输出:
a b c
0 7 28 7
1 16 40 8
2 27 54 9注:我不熟悉达斯克,但我想这是同一个问题的尝试。
https://stackoverflow.com/questions/64162962
复制相似问题