Python 针对多个列创建列、行值映射

Python 针对多个列创建列、行值映射,python,python-2.7,pandas,Python,Python 2.7,Pandas,我想在我的df中创建一个新列,此列的值将映射到其他几个列的值 目前我有: df['PLATFORM'] = df['ID_1'].map(lambda x: 'ID_1_MATCH' if x == 9 else 0) df['PLATFORM'] = df['ID_2'].map(lambda x: 'ID_2_MATCH' if x == 10 else 0) df['PLATFORM'] = df['ID_3'].map(lambda x: 'ID_3_MATCH' if x == 11

我想在我的
df
中创建一个新列,此列的值将映射到其他几个列的值

目前我有:

df['PLATFORM'] = df['ID_1'].map(lambda x: 'ID_1_MATCH' if x == 9 else 0)
df['PLATFORM'] = df['ID_2'].map(lambda x: 'ID_2_MATCH' if x == 10 else 0)
df['PLATFORM'] = df['ID_3'].map(lambda x: 'ID_3_MATCH' if x == 11 else 0)
使用这种方法,新列中的值将在第二个和第三个映射上被覆盖(其中
x
匹配lambda表达式的条件)。我只想更新列,在上一个映射之后,仍然有一个0值

有没有办法根据其他几列中的行值,以分层方式将值映射到新列中?

我认为您需要:

样本:

df = pd.DataFrame({'ID_1':[9,2,3,4],
                   'ID_2':[4,10,6,1],
                   'ID_3':[7,8,11,0]})

print (df)
   ID_1  ID_2  ID_3
0     9     4     7
1     2    10     8
2     3     6    11
3     4     1     0

df['PLATFORM'] = np.where(df['ID_1']  == 9, 'ID_1_MATCH', 
                 np.where(df['ID_2']  == 10, 'ID_2_MATCH', 
                 np.where(df['ID_3']  == 11, 'ID_3_MATCH', 0 )))
print (df)
   ID_1  ID_2  ID_3    PLATFORM
0     9     4     7  ID_1_MATCH
1     2    10     8  ID_2_MATCH
2     3     6    11  ID_3_MATCH
3     4     1     0           0

使用位掩码仅设置条件为真的行

这比任何地图或lambda都更惯用(更快)

>>> df = pandas.DataFrame(columns=['x', 'y'], data=[[0,1], [1,2]])
>>> df
   x  y
0  0  1
1  1  2
>>> df.ix[df['x'] % 2 == 0, 'match'] = 'x is even'
>>> df.ix[df['y'] % 2 == 0, 'match'] = 'y is even'
>>> df
   x  y      match
0  0  1  x is even
1  1  2  y is even
>>> 

这很有效-谢谢!是否有建议的嵌套次数限制
np.where
?在这种情况下,我需要嵌套多达10次。我认为没有限制。只有在大df中它可能有点慢。这似乎是一个很好的方法,只是它覆盖了以前为列指定的值。如果我知道条件没有重叠,我肯定会继续使用这个。谢谢
>>> df = pandas.DataFrame(columns=['x', 'y'], data=[[0,1], [1,2]])
>>> df
   x  y
0  0  1
1  1  2
>>> df.ix[df['x'] % 2 == 0, 'match'] = 'x is even'
>>> df.ix[df['y'] % 2 == 0, 'match'] = 'y is even'
>>> df
   x  y      match
0  0  1  x is even
1  1  2  y is even
>>>