örneğin Python 2.7.5 ile pandas sürümü 0.14.1 kullanıyorum ve üç sütunlu bir veri çerçevesi vardır:Sadece bir satır kullanarak pandalar veri karesinde seçilen satırlar için sütun değerlerini değiştirmek için doğru sözdizimi nedir?
L R VALUE
0 left right -1
1 right left 1
2 left right -1
3 right left 1
4 left right -1
5 right left 1
: şöyle bir veri çerçevesi içinde
import pandas as pd
d = {'L': ['left', 'right', 'left', 'right', 'left', 'right'],
'R': ['right', 'left', 'right', 'left', 'right', 'left'],
'VALUE': [-1, 1, -1, 1, -1, 1]}
df = pd.DataFrame(d)
idx = (df['VALUE'] == 1)
sonuçları
VALUE == 1
'un bulunduğu satırlarda, sol ve sağ sütunların içeriğini değiştirmek istiyorum, böylece "sol" değerlerin tümü "L" sütununun altına ve "sağ" değerlerin altında kalıyor. "R" sütunu.
Kolayca şöyle geçici bir değişken kullanarak, sadece üç tane daha hatlarında yapabilirsiniz, zaten olması yukarıda idx
tanımlı değişkenlere:
tmp = df.loc[idx,'L']
df.loc[idx,'L'] = df.loc[idx,'R']
df.loc[idx,'R'] = tmp
ancak bu benim için gerçekten aksak ve inelegant sözdizimi gibi görünüyor; kesinlikle pandalar daha özlü bir şeyi destekliyor mu?
In [2]: print(df.loc[idx,['R','L']])
R L
1 left right
3 left right
5 left right
Bu aynı takas uygulamak mümkün olması gerektiğini bana gösteriyor: Ben veri çerçevesi .loc
öznitelik için girişteki sütun sırasını takas eğer, o zaman ben şu takas çıkış olsun fark ettik yukarıdaki gibi, sadece aşağıdaki tek satırını kullanarak:
df.loc[idx,['L','R']] = df.loc[idx,['R','L']]
Ancak aslında bu çalıştığınızda hiçbir şey olmuyor - sütunlar unswapped kalır. Pandalar, sütunları atama bildiriminin sağ tarafında yanlış sıraya koyduğumu otomatik olarak algılar ve sorun için otomatik olarak düzeltir. Takasın gereksiz geçici değişkenler oluşturmadan uygulanabilmesi için pandalar atamalarında bu "sütun düzenini otomatik düzeltme" özelliğini devre dışı bırakmamın bir yolu var mı? Sütun adlarına hizalama önlemek olabilir
Eğer dataframe.eval baktın mı? Onlar pandalar docs örnek var: >>> df = DataFrame (randn (10, 2), sütunlar = liste ('ab')) >>> df.eval ('a + b') >>> df. eval ('c = a + b') – Rainy
Merak eden herkes için bir takip sorusu gönderdim: http://stackoverflow.com/questions/25811529/setting-values-on-a-subset-of-rows -ekeksleme-boolean ayarı – JohnE