2016-04-07 13 views
1

ile eşleştiğinde veri çerçevesi satırını, tuple değerlerinden koşullu olarak doldurun. Veri çerçevemi koşullu olarak sütunları doldurarak güncelleştirmeye çalışıyorum. Dataframe satırındaki bir değeri bir tuple karşılaştırmak ve daha sonra aynı dataframe satırının farklı bir sütununu tuple'dan başka bir değerle karşılaştırmak istiyorum.Veri çerçevesi ve tuple değerleri

foo = pd.DataFrame({"TIME":([1,1,2,2,3,3,4,4,5,5,6,6]), 
       "PLACE": (["place1","place2","place1","place2","place1","place2","place1","place2","place1","place2","place1","place2"]), 
       "Xcords" :(["","","","","","","","","","","",""]), 
       "Ycords" :(["","","","","","","","","","","",""])}) 

ve yeri ve x ve y koordinatları, bir demet: Örneğin

 PLACE TIME Xcords Ycords 
0 place1  1  1  11 
1 place2  1  2  22 
2 place1  2  1  11 
3 place2  2  2  22 
4 place1  3  1  11 
5 place2  3  2  22 
6 place1  4  1  11 
7 place2  4  2  22 
8 place1  5  1  11 
9 place2  5  2  22 
10 place1  6  1  11 
11 place2  6  2  22 
:

bar = [('place1','1','11'),('place3','3','33'),('place2','2','22')] 

Sonunda aşağıdaki istiyorum

, "PLACE" sütun değerinin sütun değeri, aynı veri çerçevesi dizisindeki Xcords ve Ycords satırındaki ilk değerle eşleştiğinde tuple'nin 2. ve 3. değerleri ile doldurulmalıdır. Bu, tüm durumlar için bir kereden fazla göründüğü için gerçekleşmelidir.

Böyle bir şey için doğru sözdizimi ne olurdu? Bunu denedim ama sonra tüm X_cords ve Y_cords satır aynı değere sahip sona: veri kümeleri hem çok büyük olduğundan Ayrıca

for i in bar: 
    if any(foo["PLACE"]==i[0]): 
     foo.X_cords = i[1] 
     foo.Y_cords = i[2] 

döngü için önlenebilir?

+0

'11' ve '22 'nereden geldiğini? – MaxU

+0

Tuple'ı düzenledim, onun 1,11-2,22-3,33 –

cevap

4

istediğin bu mu?

In [191]: bar_df = pd.DataFrame(bar, columns=['PLACE','Xcords','Ycords']) 

In [192]: bar_df 
Out[192]: 
    PLACE Xcords Ycords 
0 place1  1  10 
1 place3  3  30 
2 place2  2  20 

In [193]: pd.merge(foo[['PLACE','TIME']], bar_df, on='PLACE', how='left') 
Out[193]: 
    PLACE TIME Xcords Ycords 
0 place1  1  1  10 
1 place2  1  2  20 
2 place1  2  1  10 
3 place2  2  2  20 
4 place1  3  1  10 
5 place2  3  2  20 
6 place1  4  1  10 
7 place2  4  2  20 
8 place1  5  1  10 
9 place2  5  2  20 
10 place1  6  1  10 
11 place2  6  2  20 

veya @Alexander olarak

söz:

In [235]: foo[['PLACE','TIME']].merge(bar_df, on='PLACE', how='left') 
Out[235]: 
    PLACE TIME Xcords Ycords 
0 place1  1  1  10 
1 place2  1  2  20 
2 place1  2  1  10 
3 place2  2  2  20 
4 place1  3  1  10 
5 place2  3  2  20 
6 place1  4  1  10 
7 place2  4  2  20 
8 place1  5  1  10 
9 place2  5  2  20 
10 place1  6  1  10 
11 place2  6  2  20 
+1

'foo.merge (bar_df, on = 'PLACE', nasıl = 'sol')' olması gerektiği de iyi olmalıydı. – Alexander

+0

@Alexander, teşekkürler, cevabımı güncelledim – MaxU

+0

Gerçekten de bu hile yaptı. Pandalar için oldukça yeni :-) Birleştirme aracı çok güçlü görünüyor ve parçalanmış veri kümem için çok yararlı olacak. Sanırım şimdi yapmak için biraz okuma var .... Teşekkürler! –