简单地说,我想这样做:
df.s1.map["a":df.s2+1, "b":df.s2-1]
但是,它不起作用,因为df.s2
不是常量。
如何在s1='a'
时在df.s2+1
上映射s1
,并在s1='b'
时在df.s2-1
上映射s1
?
您可以使用apply
将lambda
与axis = 1
一起使用,即如果您有数据帧
df = pd.DataFrame({'s1':['a','b','a','a','b'],'s2':[1,3,5,2,4]})
df['s3'] = df.apply(lambda x : x['s2']+1 if x['s1'] == 'a' else x['s2']-1 ,axis=1 )
或者从字典中获取 d['s2'] common,然后在映射后将其添加到末尾。
df['s3'] = df.s1.map({'a':1,'b':-1})+df['s2']
输出:
S1 S2 S3 0 一 1 2 1 b 3 2 2 A 5 6 3 一 2 3 4 b 4 3 在 [364]
:输出 :