我正在尝试创建一个新的数据框,如果满足来自另一个数据帧的条件,则会向其添加值。如果列不为空,则它将应用一个函数,该函数将前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
答案 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