2016-04-11 23 views
1

uygulamasında veri işleminden veri nesnesine birleştirme Bir uygulama işleminden bir nesneyim var ve bunu bir veri çerçevesiyle birleştirmek istiyorum. Benim anlayışım, uygulama işleminden çıkan nesnenin bir veri çerçevesi olmaması ve bu nedenle birleştirme işleminin kullanılmasının mümkün olmamasıdır. Bir yaklaşım, bir veri alanına dönüştürmek olurdu, ama nasıl olduğunu bilmiyorum.Nesneyi PANDAS

AAA 5 
BBB 6 
CCC 3 

bunu birleştirmek istiyorum: Ben şu var Sonuç olarak

p1 = df1.apply(lambda series: series.first_valid_index()) 

: Örneğin

, bir dataframe df1 için ilk geçerli endeksini hesaplamak için aşağıdaki kodu kullanılmış dataframe df2 ile:

 val1 val2 
Index 
    AAA 12  qw 
    BBB 6  te 
    CCC 31  gb 

yüzden şu alabilirsiniz:

 val1 val2 val3 
Index 
    AAA 12  qw 5 
    BBB 6  te 6 
    CCC 31  gb 3 

denemek tipi (df1) Ben

<class 'pandas.core.series.Series'> 

nasıl birleştirme işlemini yapabileceğini aşağıdaki olsun? Yardım için teşekkürler.

cevap

1

Dizindeki renk hizalamalarına katılın.

p1.name = 'val3' 
>>> df2.join(p1) 
    val1 val2 val3 
AAA 12 qw  5 
BBB  6 te  6 
CCC 31 gb  3 
+0

Yanıtlama ve dikkat için çok teşekkür ederim, işe yarıyor. Sadece uygulama işleminin çıktısını pd.DataFrame (p1) kullanarak bir veri çerçevesine dönüştürebildiğimi ve sonra df2 ile birleştirmek için birleştirme işlemini kullanabileceğimi ekledim. Bu ayarın mevcut ortamda daha verimli olabileceğinden şüpheleniyorum. – km1234

0

Tanımladığınız belirli gereksinimler için iki veri çerçevesini birleştirmek için birleştirme kullanmanız gerektiğini düşünmüyorum. concat işlevini veya join yöntemini öneririm; örneğin kullanım için aşağıdaki docs'a bakın.

Sorununuz için bir çözüm olarak bir parça kod çizdim. Bir panda dizisi nesnesi ise, yeni bir sütun belirterek bunu veri ortağınıza ekleyebilmeniz gerekir.

import pandas as pd 

# Making some definitions 
ind = ["AAA", "BBB", "CCC"] 
cols = ["val1","val2","val3"] 
val1 = pd.Series(index=ind, data=[21,22,23]) 
val2 = pd.Series(index=ind, data=["qw","te","gb"]) 
val3 = pd.Series(index=ind, data=[1,2,3]) 
ser = [val1,val2,val3] 

# Defining a dataframe using the defined series objects 
df1 = pd.DataFrame(index=ind, data={cols[i]:ser[i] for i in range(3)}) 
df2 = pd.DataFrame(index=ind, data={cols[i]:ser[i] for i in range(2)}) 

# Making a dataframe from first two series objects and adding 
# third column 
df22 = df2.copy() 
print("Test1, Before:") 
print(df2) 
df22["val3"] = val3 
print("Test1, After:") 
print(df22) 

# Same thing done using join 
dfj = df2.copy() 
val3.name = "val3" #need name for join 
dfj = dfj.join(val3) 
print("Test2, After:") 
print(dfj) 

# same thing done using concat 
dfc = df2.copy() 
dfc = pd.concat([dfc,val3],axis=1) 
print("Test3, After:") 
print(dfc)