がthis post上の第二の答えを取ると、私はこれは私が望む結果ではない、次のコードpandas dataframeでpool.starmap()を使用するには?
from multiprocessing import Pool
import numpy as np
from itertools import repeat
import pandas as pd
def doubler(number, r):
result = number * 2 + r
return result
def f1():
return np.random.randint(20)
if __name__ == '__main__':
df = pd.DataFrame({"A": [10,20,30,40,50,60], "B": [-1,-2,-3,-4,-5,-6]})
num_chunks = 3
# break df into 3 chunks
chunks_dict = {i:np.array_split(df, num_chunks)[i] for i in range(num_chunks)}
arg1 = f1()
with Pool() as pool:
results = pool.starmap(doubler, [zip(chunks_dict[i]['B'], repeat(arg1)) for i in range(num_chunks)])
print(results)
>>> [(-1, 20, -1, 20, -2, 20), (-3, 20, -3, 20, -4, 20), (-5, 20, -5, 20, -6, 20)]
を試してみました。私が欲しいのは、の各要素をdoubler
関数とf1
からの出力にフィードすることです。これがstarmap
とrepeat
を使用して2倍の入力といくつかのランダムな整数のリスト出力を得る理由ですそれに。例えば
、f1
の出力が2だった場合、私は
>>> [0,-2,-4,-6,-8,-10] # [2*(-1) + 2, 2*(-2) + 2, ... ]
誰もが、私はこの所望の結果を達成する方法を助言することができ返すようにしたいですか?おかげ
EDIT:全データフレームを挿入するといずれかの動作しません:
with Pool() as pool:
results = pool.starmap(doubler, [zip(df['B'], repeat(arg1))])
>>> TypeError: doubler() takes 2 positional arguments but 6 were given
基本的に、私はちょうどチャンクに私のデータフレームを分割したい、と(ARG1)これらのチャンクだけでなく、他の変数を与えます複数の引数を受け入れる関数に変換します。
あなたの 'f1()'はその乱数を返すべきでしょうか?私はあなたの問題を解決するとは思わないが、それは奇妙に見える。 – Paul