2016-06-30 8 views
2

Ich habe eine Pandas DatenrahmenWählen Sie die Zeilen 2 Spalten gegeben, wenn mindestens ein Wert unterhalb der Schwelle ist

NAME VALUE 
    A  2 
    A  1 
    B  4 
    A  3 
    C  2 
    B  8 

Ich möchte eine Spalte hinzufügen, wenn Werte in der Spalte „Name“ mindestens einen Wert enthalten in " Werte“unter 3, mit dem Namen entspricht, so dass:

NAME VALUE BELOW_THRESHOLD 
    A  2   Y 
    A  4   Y 
    B  4   N 
    A  3   Y 
    C  2   Y 
    B  8   N 
+0

Ihre beiden DataFrames sind unterschiedlich. Das zweite "A" in der ersten Tabelle hat einen Wert von 1, während das zweite "A" in der zweiten Tabelle einen Wert von 4 hat. – chrisaycock

Antwort

4

Sie groupby auf NAME und apply eine Lambda verwenden können, die Ihre Bedingung testet und nehmen Sie die max Wert, der True sein wird, wenn jeder der Bedingung ein treffen d zuweisen map mit:

In [317]: 
df['BELOW_THRESHOLD'] = df['NAME'].map(df.groupby('NAME')['VALUE'].apply(lambda x: (x < 3).max())) 
df 

Out[317]: 
    NAME VALUE BELOW_THRESHOLD 
0 A  2   True 
1 A  1   True 
2 B  4   False 
3 A  3   True 
4 C  2   True 
5 B  8   False 

Sie zu Y oder Nnp.where nach der Verwendung umwandeln kann:

In [318]: 
df['BELOW_THRESHOLD'] = np.where(df['BELOW_THRESHOLD'], 'Y','N') 
df 

Out[318]: 
    NAME VALUE BELOW_THRESHOLD 
0 A  2    Y 
1 A  1    Y 
2 B  4    N 
3 A  3    Y 
4 C  2    Y 
5 B  8    N 
+0

Nochmals vielen Dank :) Ur ein Held! – amc

3

Sie können auch umwandeln verwenden:

df.groupby('NAME').transform('min') < 3 
Out[47]: 
    VALUE 
0 True 
1 True 
2 False 
3 True 
4 True 
5 False 

Es gibt einen booleschen Array so, wenn Du brauchst J/N, du kannst es an np weitergeben, wo es wie EdChum war.

Verwandte Themen