2017-05-31 72 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

相關問題