2013-07-23 29 views
6

Bir metin dosyasını pandalara içe aktarıyorum ve dizinin 3 sütununu dizin oluşturmak için birleştirmek istiyorum.Sütunlarda İndeks Olarak Sütunları Birleştirme

Bunu 1 veya daha fazla adımda yapmaya açıkım. DataFrame'i oluştururken aynı zamanda dönüştürme yapabilirim veya DataFrame'i oluşturabilir ve yeni oluşturulan sütunla yeniden yapılandırabilirim. Bu iki yolun nasıl yapılacağını bilmek benim için en yararlı olanı olacaktır.

En sonunda, endeksin ilk 3 sütundaki değerlerin birleştirilmesi değeri olmasını isterim.

+0

'Değerlerin birleştirilmesi' ile ne demek istiyorsun? Birleştirmek istediğiniz dizeler mi? Yoksa çoklu endeks mi istiyorsunuz? – joris

+0

Bir çoklu indeks çalışmayacak. Ben sadece 3 dizeleri birleştirmeye çalışıyorum. Her biri ayrı bir DataFrame alanında. – DJElbow

+0

, veriyi (veya en azından bir kısmını) ve kodunuzu – Jeff

cevap

9

, sadece + operatörünü kullanabilirsiniz (dizeleri bağlamında eklenmesini piton onları uç uca ekleyerek ve pandalar bu izler):

In [1]: import pandas as pd 

In [2]: df = pd.DataFrame({'year':['2012', '2012'], 'month':['01', '02']}) 

In [3]: df 
Out[3]: 
    month year 
0 01 2012 
1 02 2012 

In [4]: df['concatenated'] = df['year'] + df['month'] 

In [5]: df 
Out[5]: 
    month year concatenated 
0 01 2012  201201 
1 02 2012  201202 

Ve bu sütun oluşturulursa, daha sonra, sadece İndeks

In [6]: df = df.set_index('concatenated') 

In [7]: df 
Out[7]: 
      month year 
concatenated 
201201   01 2012 
201202   02 2012 

değiştirmek için set_index kullanabilirsiniz 10

pd.concat'un 'concat'enate dizeleri değil, seri/dataframe'leri birleştirmek için olmadığını unutmayın, böylece sütunları veya satırları farklı dataframe veya seriyi tek bir veri çerçevesine (birkaç satır/sütun bir satır/sütun olarak) eklemeyin. Bunun kapsamlı bir açıklaması için bkz. http://pandas.pydata.org/pandas-docs/dev/merging.html.

+0

Bu bir! Teşekkürler! – DJElbow

+1

Ay ve yıl verileri tam sayıysa, şu şekilde birleştirme yapabilirsiniz: 'df ['concatenated'] = df ['year']. Uygulayın (str) + df ['month']. Apply (str)' – Webucator

0

Metin dosyanızın içe aktarılması için read_csv kullanıyorsanız, pass a list of column names or numbers numaralı index_col argümanını kullanabilirsiniz. Bu, bir MultiIndex yaratmaya son verecek - uygulamanıza uygun olup olmadığından emin değilim.

Dizininizi birlikte (örneğin dizeler oldukları varsayılarak) birleştirmek isterseniz, + işleciyle bunu yapabilirsiniz. senin sütunları dize oluşuyorsa (önde Uyarı, denenmemiş kod)

df['concatenated'] = df['year'] + df['month'] 
df.set_index('concatenated') 
+0

Sesleri mantıksal olarak gönderirseniz yardımcı olur, ancak denediğimde, "Yeniden İndeksleme yalnızca benzersiz olarak değerli Dizin nesneleriyle geçerli" hatası alırım. Kaybettiğim bir şey mi var? DataFrame varsayılan Otomatik Artırma endeksine sahiptir, bu yüzden benzersiz olduğunu biliyorum. – DJElbow

+0

@DJElbow: Birleştirilmiş alanlar kümesinin çiftleri gibi görünüyor. Bir endeks benzersiz olmalı. – voithos

+0

Sadece netleştirmek için - Dizini sıfırlamadan önce bu hatayı alıyorum. Bu, hataya atıldığım test kodudur: ziyaretler ['concatenated'] = pd.concat ([visit ['yıl'], ziyaretler ['month']]) – DJElbow

İlgili konular