pandas dataframe 列运算符重载

现在有一个dataframe,需要根据A,B,C列计算出DEF列,列是通过运算得到的结果
如1&-1得到的值是1
我需要1&-1或-1&1得到的值是0
求助各位

import pandas as pd

data = [
    [1, 0, 0],
    [1, 1, 1],
    [1, 0, 1],
    [1, 1, 0],
    [0, 1, 0]
]

df = pd.DataFrame(data, columns=['A', 'B', 'C'])

df['D'] = df['A'] & (df['B'] - df['C'])
df['E'] = (df['A'] & df['B']) - df['C']
df['F'] = df['A'] & df['B'] - df['C']

print df
阅读 3.8k
1 个回答

我不确定 你的问题是否一定要求运算符重载
如果不是 可以用其他方式解决这个问题

& 代表如果有两个数中有一个是0 则返回0, 否则返回1
现在新的要求是 如果1,-1 也要返回0

x&y 在(0,_),(_,0),(1,-1),(-1,1)的情况下返回0,其他返回1

这是我的想法,如果问题哪里理解有误,请指出

import pandas as pd

data = [
    [1, 0, 0],
    [1, 1, 1],
    [1, 0, 1],
    [1, 1, 0],
    [0, 1, 0]
]

df = pd.DataFrame(data, columns=['A', 'B', 'C'])
df['X'] = df['B'] - df['C']
df['D'] = df['A'] & (df['B'] - df['C'])
df['E'] = (df['A'] & df['B']) - df['C']
df['F'] = df['A'] & df['B'] - df['C']

df['DD'] = fake_overloadding(df['A'],(df['B'] - df['C']))
df['EE'] = fake_overloadding(df['A'], df['B']) - df['C']
df['FF'] = fake_overloadding(df['A'] ,df['B'] - df['C'])

print (df)

def fake_overloadding(x,y):
    return 1-((x==0)|(y==0)|((x+y==0)&(x.abs()==1))).astype(int)
 A  B  C  X  D  E  F  DD  EE  FF
0  1  0  0  0  0  0  0   0   0   0
1  1  1  1  0  0  0  0   0   0   0
2  1  0  1 -1  1 -1  1   0  -1   0
3  1  1  0  1  1  1  1   1   1   1
4  0  1  0  1  0  0  0   0   0   0
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题