2016-04-13 16 views
2

Göreceli olarak basit bir sorunum var. İki pandalar dataframes:DataFrames'ın basit bir birleşimi

a b 
one 1 2 

ve

a c 
one 1 3 

Ve ben pd.join ve pd.concat çalıştılar

a b c 
one 1 2 3 

almak istiyorum, bana satır veya sütun çoğaltmak vermek, ve verileri birleştiren ancak dizin adını kaybeden pd.merge.

<!-- language: Python --> 
a=pd.DataFrame({'a':{'one':1},'c':{'one':3}}) 
b=pd.DataFrame({'a':{'one':1},'b':{'one':2}}) 
pd.merge(a,b) 

pd.merge(a,b) 

    a c b 
0 1 3 2 

Ben pandalar veya yanlış bir şekilde sorunu çözmeye çalıştığı konusunda önemsiz bir şey kaçırmış olabileceğini kabul ediyorum.

+0

soru düzenleyin, kabul cevabı ({ 'a' istenen 'baskı pd.DataFrame gibi farklı çıktı çünkü: nasıl çalıştığını n pd.merge kullanıp left_index veya right_index ile tutmak için hangi endeks belirtin burada { 'one': 1}, 'c': {'one': 3}, 'b': {'one': 2}}) '. – jezrael

+0

Ve örnek verileriniz muhtemelen birden fazla satır olmalıdır. Hatalı bir şekilde bu basit verilerle yanlış sonuca ulaşılması kolaydır. Örneğin, bunun için beklenen çıktı nedir? df1 = pd.DataFrame ({'a': [1, 2], 'b': [2, 1]}, dizin = ['bir', 'iki']) ' ' df2 = pd.DataFrame ({'a': [1, 1, 2], 'b': [2, 2, 1]}, index = ['bir', 'bir', 'iki']) ' – Alexander

+0

@jezrael İşaretlediğiniz için teşekkürler sıralama düzeninde, cevabınızı daha eksiksiz olarak kabul ettim. – kakk11

cevap

4

Sana parametreler left_index, right_index ve merge için on ve sonra sort_index ekleyebilir düşünüyorum: Yalnızca bir belirtebilirsiniz pandas versiyonunda 0.18.0 yılında,

print pd.merge(a,b, left_index=True, right_index=True, on='a').sort_index(axis=1) 
    a b c 
one 1 2 3 

İlginç - pandas sürümünde önce left_index veya right_index0.17.2 onu hata oluştu:

print pd.merge(a,b, left_index=True, on='a').sort_index(axis=1) 
    a b c 
one 1 2 3 

print pd.merge(a,b, right_index=True, on='a').sort_index(axis=1) 
    a b c 
one 1 2 3 
+0

Seni reddettim çünkü sütunların sırasını düşünmeye özen gösterdin. Her ne kadar önemli olduğunu düşünmüyorum, çünkü gerektiğinde yeniden düzenlenebilir. – MedAli

+0

MedAli, teşekkürler. Ben şaşırdım. :) – jezrael

+0

a.merge (b, ...) biraz daha okunabilir IMO'dur. + 1 hiç-az-değil. – Alexander

1

you ca

>>> pd.merge(a,b, on='a', left_index=True) 
    a c b 
one 1 3 2 
>>> 
+0

Teşekkürler, daha karmaşık veri yapısı üzerinde çalışabilir miyim, deneyeceğim. – kakk11

+0

Hmmm, ancak sütunların sıralanması yanlış ... – jezrael

+0

@jezrael farketmez mi? – MedAli