Python

2014-07-16 34 views
5

için iki değişkene (sütun) koşullu bir lambda işlevi nasıl yazılır Bir veri kümem var, df, iki değişkenli, x ve y. Ben şunları yapar bir işlev yazmak istiyorum:Python

x x> 100 ve y < ben STATA veri analizi yapmaya alışkınım

yüzden nispeten yeni başka y olduğum 50 ise veri analizi için pandalar. Eğer yardımcı olur Stata o gibi olacaktır:

yerine, x = koşul (x> 100 & y < 50, x, y)

Diğer bir deyişle

, fonksiyon iki koşuluna bağlıdır df sütunları ve koşulu karşılayıp karşılamadığına bağlı olarak her satırdaki bir değişkenden diğerine bir değer döndürür.

Şimdiye kadar gibi yeni fonksiyonlar yoluyla yeni değişkenler yaratmak olmuştur:

df.dummyVar = df.x.apply (lambda x: 1 Başka x> 100 0 ise)

StackOverflow'u ve belgeleri kullanarak, yalnızca tek bir değişkene bağlı bir işlevi birden fazla sütuna (eksen seçeneğini kullanarak) nasıl uygulayabildiğimi buldum. Lütfen yardım et. Bu gibi

cevap

11

Kullanım where: olduğu gibi bir işlem uygulamak gerçekleştirirken daha bu çok daha hızlı olacaktır

df['dummyVar '] = df['x'].where((df['x'] > 100) & (df['y'] < 50), df['y']) 

bazı iyi okuma için bkz

vektörleştirilmiş.

+0

Bu tam olarak ihtiyacım olan şey. Ve bu harika çünkü 3 veya daha fazla değişkende koşullara nasıl genişletebileceğimi görebiliyorum. Teşekkür ederim! – seeiespi

+0

@seeiespi Rica ederim, bunu cevap olarak kabul edebilirsiniz, oylama düğmelerinin altında bir onay işareti olacak. Uygula ve yinelemeyi kullanmak her zaman son seçenek olmalıdır, mümkünse tüm veri tabanında çalışan bir yöntem bulunmalıdır. – EdChum

5

Python'da

f = lambda x, y: x if x>100 and y<50 else y 

Lambda (ler) normal bir fonksiyon tanımlama eşdeğerdir.

def f(x, y): 
    return x if x>100 and y<50 else y 

Not: bir Lambda vücut geçerli bir ifadesi olmalıdır. Bu, örneğin: return gibi şeyleri kullanamayacağınız anlamına gelir; Lambda değerlendirilen son ifadeyi döndürür.

+0

Aslında böyle bir işlev yazmıştım, ancak her satırda bir döngü olmadan çalışacak şekilde gerçekleştiremedim. EdChum tarafından sağlanan cevap tam olarak bunu yapar. Bu tanımlı işlevi kullanarak bunu gerçekleştirmenin bir yolunu biliyorsanız, bundan sonra da bundan yararlanabileceğime eminim. Giriş için teşekkürler :) – seeiespi

+0

@seeiespi Başlangıçta "İki argüman alır bir lambda işlevi nasıl oluşturulur?" - Bu nasıl olur :) - EdChum size, veri kümeleriniz ve pandalarınızla neyle ilgili olduğunu/niyetinizle daha uyumlu bir cevap verdi. –