Katakanlah saya memiliki dataframe berikut:
Apa cara yang paling efisien untuk memperbarui nilai kolom feat dan another_feat di mana alirannya nomor 2 ?
Apakah ini?
for index, row in df.iterrows():
if df1.loc[index,'stream'] == 2:
# do something
UPDATE: Apa yang harus saya lakukan jika saya memiliki lebih dari 100 kolom? Saya tidak ingin secara eksplisit memberi nama kolom yang ingin saya perbarui. Saya ingin membagi nilai setiap kolom dengan 2 (kecuali untuk kolom aliran).
Jadi untuk memperjelas apa tujuan saya:
Membagi semua nilai dengan 2 dari semua baris yang memiliki aliran 2, tetapi tidak mengubah kolom aliran
100
kolom ini dengan cara tertentu. misalnya jika membutuhkan100
kolom pertama, gunakandf.columns[:100]
dan kemudian diteruskan keloc
.Anda dapat melakukan hal yang sama dengan
.ix
, seperti ini:In [1]: df = pd.DataFrame(np.random.randn(5,4), columns=list('abcd')) In [2]: df Out[2]: a b c d 0 -0.323772 0.839542 0.173414 -1.341793 1 -1.001287 0.676910 0.465536 0.229544 2 0.963484 -0.905302 -0.435821 1.934512 3 0.266113 -0.034305 -0.110272 -0.720599 4 -0.522134 -0.913792 1.862832 0.314315 In [3]: df.ix[df.a>0, ['b','c']] = 0 In [4]: df Out[4]: a b c d 0 -0.323772 0.839542 0.173414 -1.341793 1 -1.001287 0.676910 0.465536 0.229544 2 0.963484 0.000000 0.000000 1.934512 3 0.266113 0.000000 0.000000 -0.720599 4 -0.522134 -0.913792 1.862832 0.314315
EDIT
Setelah informasi tambahan, berikut ini akan mengembalikan semua kolom - di mana beberapa kondisi terpenuhi - dengan nilai yang dibelah dua:
>> condition = df.a > 0 >> df[condition][[i for i in df.columns.values if i not in ['a']]].apply(lambda x: x/2)
Saya harap ini membantu!
sumber
condition = (df.a == -1.001287)
mengharapkan nilai-nilai dibagi dari baris di manaa == -1.001287
tetapi saya mendapatkan kembali kerangka data kosong.df.iloc[1,0]
. Atau lebih baik lagi tetapkan nilainya sendiri dan kemudian coba lagi:df.iloc[1,0] = 1.2345; condition = df.a == 1.2345
condition = (df.a == -1.001287)
tidak berhasil?ix
sekarang tidak digunakan lagi.