4

で動作するコードがありますがpandas、使用するように変換するのに問題がありますdaskここに部分的な解決策がありますが、作成/割り当て先の列の名前として変数を使用することはできません。

作業pandasコードは次のとおりです。

percent_cols = ['num_unique_words', 'num_words_over_6']

def find_fraction(row, col):
    return row[col] / row['num_words']

for c in percent_cols:
    df[c] = df.apply(find_fraction, col=c, axis=1)

dask私が望むことをしないコードは次のとおりです。

data = dd.from_pandas(df, npartitions=8)

for c in percent_cols:
    data = data.assign(c = data[c] / data.num_words)

cこれにより、(必要なもの)の値を変更するのではなく、呼び出された新しい列に結果が割り当てられますdata[c]。列名を変数にすることができれば、新しい列を作成しても問題ありません。たとえば、これが機能した場合:

for c in percent_cols:
    name = c + "new"
    data = data.assign(name = data[c] / data.num_words)

明らかな理由から、python は式を an の左側に置くことを許可せず、=の前の値を無視しますname

割り当て先の列の名前に変数を使用するにはどうすればよいですか? ループは、コピー/貼り付けするよりもはるかに多く繰り返されます。

4

1 に答える 1

2

これは、Python 言語の質問として解釈できます。

質問: 変数の値をキーワード引数の名前として使用するにはどうすればよいですか?

答え:辞書を使って**解凍する

c = 'name'
f(c=5)       # 'c' is used as the keyword argument name, not what we want
f(**{c: 5})  # 'name' is used as the keyword argument name, this is great

Dask.dataframe ソリューション

特定の質問については、次のことをお勧めします。

d = {col: df[col] / df['num_words'] for col in percent_cols}
df = df.assign(**d)

パンダでもこれを行うことを検討してください

この.assignメソッドは Pandas でも利用でき、.apply.

于 2015-11-06T01:47:17.557 に答える