2017-06-06 21 views
0

パンダでapplymap()機能を使用して、データフレーム全体に機能を適用しようとしています。私は、データフレームdf(そのサンプルは以下の通りである)を有する:pandasでapplymap()を使って関数にデータフレームを渡すには?

Time 2010-08-31 2010-09-30 2010-10-31 2010-11-30 2010-12-31 2011-01-31 2011-02-28 2011-03-31 2011-04-30 
00:00 0.429188 0.302406 0.587415 0.227820 0.115938 0.170616 0.056256 0.078167 0.476515 
00:30 0.340452 0.385037 0.218495 0.238118 0.134938 0.123279 0.054984 0.108111 0.173700 
01:00 0.455451 0.433700 0.229352 0.253046 0.391425 0.313715 0.401116 0.123304 0.453640 
01:30 0.601494 0.576142 0.425599 0.590769 0.486930 0.419002 0.560737 0.554705 0.544313 
02:00 0.504342 0.584523 0.614539 0.375294 0.377951 0.342675 0.357372 0.367332 0.391336 
02:30 0.527724 0.443303 0.457283 0.369515 0.392317 0.379410 0.391916 0.444807 0.491411 
03:00 0.429236 0.531203 0.464098 0.370421 0.426875 0.360209 0.276282 0.179577 0.304990 
03:30 0.442019 0.510604 0.314080 0.372268 0.443884 0.461649 0.390262 0.284042 0.417354 

を私はまた、次のされている2つの他のフレーム、すなわち、df_peakdf_off_peak有する:

df_peak = pd.DataFrame(np.random.randn(20,2), columns=list(['Peak Consumption', 'Loss'])) 
df_off_peak = pd.DataFrame(np.random.randn(20,2), columns=list(['Off Peak Consumption', 'Loss'])) 

を私は次の関数を書かれています別のファイルinterpolate.pyに:

機能消費に

0123に対応する損失を計算します

それから私は、次のように機能cost_consumpを呼び出す:

from interpolate import cost_consump 
df1 = pd.DataFrame.copy(df,deep=True) 

for i in range(0,48): 
    for j in range(0,12): 
     mean_consump = df.transpose().iloc[i,j] 
     df1.transpose().iloc[i,j] = cost_consump(mean_consump,df_loss_peak,df_loss_off_peak) 

私が望むように、これは完璧に動作します。しかし、仕事がapplymap()を使って行うことができるかどうか私は興味があります。私は、データフレームdfに関数を適用し、結果の演算をdf1に保存する場所を次のように書きました。

Monthly_mean_cost = Monthly_mean_consump.transpose().applymap(cost_consump(**df_loss_peak,**df_loss_off_peak)) 

しかし、これには、私がそれを行う方法がわからない関数に2つの追加のデータフレームを渡す必要があります。

私は助けていただきありがとうございます。

答えて

1

これは、applymapで使用される関数に引数を渡す方法に関する一般的な質問だと思います。 Applymapは、データフレームの各シリーズの各要素を渡された関数に渡します。これは自動的に最初の引数として渡されます。この最初の要素(下の例ではx)と他のデータフレームまたは引数を組み込んだ関数を書くことができます。

ラムダ関数を使用して呼び出すことができます。以下に例を示します。

import numpy as np 
import pandas as pd 
df = pd.DataFrame(np.random.randn(3, 3)) 
peak = pd.DataFrame(np.random.randn(3, 3)) 
off_peak = pd.DataFrame(np.random.randn(3, 3)) 

def applymapFunction(x, df1, df2): 
    if x > 0.5: 
     return x * df1.mean()[0] 
    else: 
     return x * df2.mean()[0] 

df.applymap(lambda x: applymapFunction(x, peak, off_peak)) 
+0

ありがとうございます、それは魅力的でした。 – Pankaj

関連する問題