2016-04-11 1 views
1

私は適用操作のオブジェクトを持っていて、データフレームとマージしたいと思います。私の理解では、適用操作からのオブジェクトはデータフレームではないため、マージ操作を使用することはできません。アプローチはデータフレームに変換することですが、どのようにすればよいか分かりません。PANDASの適用操作からデータフローへのオブジェクトの結合

AAA 5 
BBB 6 
CCC 3 

私はそれをマージしたい:私は次のように得た結果

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

:たとえば

は、私は、データフレームDF1のための最初の有効なインデックスを取得するには、次のコードを使用しましたデータフレームDF2で:

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

ので、私は次のことを得ることができます。

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

私がしようタイプ(DF1)私は

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

がどのようにマージ操作を行うことができ、次のですか?お手伝いありがとう。

答えて

1

索引は索引で整列します。

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

ご回答いただきありがとうございます。迅速に対応いたします。これを追加するには、pd.DataFrame(p1)を使用してapply操作の出力をデータフレームに変換し、次にmerge操作を使用してdf2とマージできることがわかりました。私はおそらく、現在の設定でより効率的な結合を疑う。 – km1234

0

あなたが説明した特定のニーズに合わせて2つのデータフレームを結合するためにマージを使用する必要があるとは思いません。 concat関数またはjoinメソッドをお勧めします。たとえば、使用方法は次のとおりです。docs

問題の解決策として、私はコードを傷つけました。それがpandasシリーズオブジェクトの場合は、新しい列を指定してデータフレームに追加することができます。

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) 
関連する問題