2012-10-25 156 views
5

我有一个数据框,其中两列代表一个生物体。它们被称为ORG1和ORG2 我想将ORG2的值移到ORG1中以获取相应的索引值。因此,如果ORG1是'A'而ORG2是'B',我想让ORG1从ORG2中取值'B'。基于另一列值更改熊猫DataFrame列值

我已经开始工作,以确定我要移动ORG2生物指标,如下:

def move_org2(x): 
    org2_matches = Series(x.ORG2.str.count("ESBL")) 
    return x.ix[org2_matches == 1] 

org2_DF = move_org2(DF) 

org2_DF.ORG2.index 

什么是使用这种对应ORG2更改与值ORG1价值的最佳途径指数

回答

14
In [13]: df 
Out[13]: 
    ORG1 ORG2 
0 A ESBL 
1 B  P 
2 C  Q 
3 D  R 
4 E ESBL 

In [14]: cond = df.ORG2 == 'ESBL' 

In [15]: df.ORG1[cond] = df.ORG2[cond] 

In [16]: df 
Out[16]: 
    ORG1 ORG2 
0 ESBL ESBL 
1  B  P 
2  C  Q 
3  D  R 
4 ESBL ESBL 
+0

感谢@沃特 - overmeire,非常简洁。 – John

1

换句话说,使用.loc你会做

In [2008]: df 
Out[2008]: 
    ORG1 ORG2 
0 A ESBL 
1 B  P 
2 C  Q 
3 D  R 
4 E ESBL 

In [2009]: df.loc[df['ORG2'] == 'ESBL', 'ORG1'] = df['ORG2'] 

In [2010]: df 
Out[2010]: 
    ORG1 ORG2 
0 ESBL ESBL 
1  B  P 
2  C  Q 
3  D  R 
4 ESBL ESBL 

或者,如果你需要一个副本,而不需要修改原来的df,您可以使用.mask()

In [2016]: df.mask(df['ORG2'] == 'ESBL', df['ORG2'], axis=0) 
Out[2016]: 
    ORG1 ORG2 
0 ESBL ESBL 
1  B  P 
2  C  Q 
3  D  R 
4 ESBL ESBL 
相关问题