使用apply写入全局Pandas数据帧

时间:2016-05-24 22:33:07

标签: python numpy pandas

我正在尝试创建一个新的数据框,如果满足来自另一个数据帧的条件,则会向其添加值。如果列不为空,则它将应用一个函数,该函数将前90行写入新数据帧。但是,当我编写当前代码时,我遇到了很多错误,因为我对应用函数后返回的值有些疑惑。

我编写了一个使用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

因此,在这种情况下,在应用函数之后,我想创建一个数据框B,它将在Characters1列中找到“1”值之前的所有值,而不是3个值,而是90。

DataFrame B

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

1 个答案:

答案 0 :(得分: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