2017-05-31 70 views
0

输入另一个列值:给定一个列值返回基于一些条件

ColumnA: 
A 
A 
B 
B 
C 
C 

输出

ColumnB: 
0 
1 
0 
1 
0 
1 

的条件是:该塔B将是0,如果在A列中的值是第一次出现。否则B列将会是1.谢谢!在Python中使用熊猫。

+0

所以......你到目前为止试过了什么? –

+0

df.apply(lambda x:int(x.ColumnA in df.iloc [:x.name,0] .tolist()),axis = 1)尝试这一个。但是当数据量很大时,效率并不好。 – andrew

回答

1

使用duplicated + astype面具int

print (df.duplicated()) 
0 False 
1  True 
2  True 
3 False 
4  True 
5 False 
6  True 
dtype: bool 

df['ColumnB'] = df.duplicated().astype(int) 
print (df) 
    ColumnA ColumnB 
0  A  0 
1  A  1 
2  A  1 
3  B  0 
4  B  1 
5  C  0 
6  C  1 
+0

您的方式在处理大量数据时非常高效。谢谢! – andrew

+0

很高兴能帮到你!如果我的回答很有帮助,请不要忘记[接受](http://meta.stackexchange.com/a/5235/295067)它。谢谢。 – jezrael

0
df=pd.DataFrame({'ColumnA': {0: 'A', 1: 'A', 2: 'B', 3: 'B', 4: 'C', 5: 'C'}}) 

df 
Out[284]: 
    ColumnA 
0  A 
1  A 
2  B 
3  B 
4  C 
5  C 

使用适用于检查值曾经出现过。

df['ColumnB'] = df.apply(lambda x: int(x.ColumnA in df.iloc[:x.name,0].tolist()), axis=1) 

df 
Out[287]: 
    ColumnA ColumnB 
0  A  0 
1  A  1 
2  B  0 
3  B  1 
4  C  0 
5  C  1 
+0

df.iloc [:x.name,1] ?? – andrew

+0

如果有大量数据,我们有更快的方法来获得结果吗? – andrew

相关问题