四則演算(和)をビット演算で表現

create a new series which base on other two series – StackOverflow

普通に考えれば,evalを用いてメソッドチェーン.

import io
import pandas as pd


strings = """a  b 
1  6 
4  7
5  8
8  9"""

df = (
    pd.read_csv(io.StringIO(strings), sep='\s+')
    .eval('c=(3 - a % 2)*b')
)

df
    a   b   c
0   1   6   12
1   4   7   21
2   5   8   16
3   8   9   27

回答の雰囲気だと,四則演算を用いずに計算するという質問だったのだろうか?
極めて無駄な事をやっているのは言うまでもないけど,四則演算をビット演算に置き換えれば,

import io
import pandas as pd


def add(a, b):
    return add(a^b, (a&b)<<1) if b.sum() else a


strings = """a  b 
1  6 
4  7
5  8
8  9"""

df = pd.read_csv(io.StringIO(strings), sep='\s+')

a = df['a'].values
b = df['b'].values
c = b << (a & 1 ^ 1)

df.assign(c=add(b, c))
    a   b   c
0   1   6   12
1   4   7   21
2   5   8   16
3   8   9   27
広告
カテゴリー: 未分類 パーマリンク

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト /  変更 )

Google フォト

Google アカウントを使ってコメントしています。 ログアウト /  変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト /  変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト /  変更 )

%s と連携中

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください