2016-05-24 8 views
-2

別のデータフレームの条件が満たされている場合、値が追加された新しいデータフレームを作成しようとしています。列が空でない場合は、90行先の行を新しいデータフレームに書き込む関数を適用します。しかし、現在のコードを書いているときにエラーが発生しています。関数を適用した後に返される値が混乱しています。グローバルPandasデータフレームへの書き込みの適用

forループを使用するコードを記述しましたが、実行にはかなりの時間が必要です。私はちょうどnumpyとpandasで新しいコードを書くことを望んでいました。

df_regression = pd.DataFrame() 

def func(x): 
    global df_regression 
    a = x.name 
    b = x.name - 89 

    df_writetoreg = df6_mod[b:a] 
    df_regression = df_regression.append(df_writetoreg) 
    return df_writetoreg  


df6_mod[pd.notnull(df6_mod['Characters1'])][['Characters1']].apply(lambda x: func(x), axis=1) 

**** EDIT *****

例:

DATAFRAME Aこの場合、したがって

Example  Value  Characters1 
    A    10   NA 
    A    20   NA 
    A    30   1 
    A    15   NA 
    A    10   NA 
    B    10   NA 
    B    20   NA 
    B    30   NA 
    B    15   1 
    B    10   NA 

、関数を適用した後、私が作成したいですCharacters1列にある "1"値の前にあるすべての値を持つデータフレームB、ここでは3つの値の代わりに90を持つ。

データフレームB

Example  Value  Characters1 
    A    10   NA 
    A    20   NA 
    A    30   1 
    B    20   NA 
    B    30   NA 
    B    15   1 
+0

あなたが求めているものを私に明確ではありません。また、私はあなたのコードを見て何を意味するかを判断することはできません。より良いアプローチは、サンプルデータを提供し(データフレームを生成するためのコードを提供する方がよい)、望ましい出力がどのように表示されるべきかを示すことです。このようにして、何が期待されているかの例を用いて何をすべきかについての漠然とした説明を作り出すことができます。 – piRSquared

+0

それを読んだ後、私は間違いなくそれが混乱していることがわかります。 現在、データセットAがあり、そのデータセットの列の1つに値が含まれています。私は、その列を通過して非NA値を見つける関数を呼び出す必要があります。その列の値を検出するたびに、その行を処理する最後の80行を新しいデータフレーム(たとえば、データファイルB)にスライスする機能が適用されます。そして、そのアイデアは、DataFrame Aで見つかったNA以外の各値に対して80行しかない新しいデータフレームを構築することです。 – Raptor776

+0

詳細情報が必要な場合は、正確なデータを提供できるかどうか、私は質問の編集で例を再構築することができます。 – Raptor776

答えて

1

質問がやや不明確であるが、ここで私はあなたが必要だと思うものです:

In[1] import pandas as pd 
     df = pd.DataFrame({"Example": ["A","A","A","A","A","B","B","B","B","B"], 
"Value": [10,20,30,15,10,10,20,30,15,10], "Characters1": [np.nan, np.nan, 1, np.nan,np.nan,np.nan,np.nan,np.nan,1, np.nan]}) 

In[2] df[df.Characters1.bfill(limit=2) == 1] # Replace limit=2 with 99 for your case 
Out[2]: 
    Characters1 Example Value 
0   NaN  A  10 
1   NaN  A  20 
2   1.0  A  30 
6   NaN  B  20 
7   NaN  B  30 
8   1.0  B  15 
+0

ありがとう、これはうまくいくはずです。そして、あいまいさを残念に思って、次の質問が非常に明確であることを確認します。再度、感謝します! – Raptor776

関連する問題