Python在函数中写入数据帧

Python在函数中写入数据帧,python,function,dataframe,assign,Python,Function,Dataframe,Assign,我相信这一定是直截了当的,但我已经尝试解决这一问题几天了,我想我知道我做错了什么,但我被各种想法难住了: 我使用一个函数来子集一个数据帧,并基于子集在该子集中创建一个新列并填充它。这是可行的,但除非我将其分配回名为mod_df的新数据帧,否则我无法将其返回到df中 似乎在函数结束后,数据丢失了 如果您有任何想法,我将不胜感激 mod_df = [] def Pop_Gen(lower, upper, val): x = df[(df['byear'] >= lower) &

我相信这一定是直截了当的,但我已经尝试解决这一问题几天了,我想我知道我做错了什么,但我被各种想法难住了:

我使用一个函数来子集一个数据帧,并基于子集在该子集中创建一个新列并填充它。这是可行的,但除非我将其分配回名为mod_df的新数据帧,否则我无法将其返回到df中

似乎在函数结束后,数据丢失了

如果您有任何想法,我将不胜感激

mod_df = []

def Pop_Gen(lower, upper, val):
    x = df[(df['byear'] >= lower) &  (df['byear'] <= upper)].assign(Gen = val)
    mod_df.append(x)

for index, row in gen_Ref_df.iterrows():
    Pop_Gen(row.lower,row.upper,row.val)
第二数据帧:

df:

   Name  byear  
0  John  1980  
1  Mary  1990 
gen_Ref_df:

   val   lower   upper  
0  old   1970    1985  
1  new   1986    1995
电流输出

mod_df:

   Name  byear Gen  
0  John  1980  old  
1  Mary  1990  new
预期输出(在
df中
无需输入
mod_df


假设
df
gen_Ref_df
具有相同的行数,我将执行以下操作:

#这些应该是您的输入数据帧
d={'name':['John','Mary'],'byear':[19801990]}
df=pd.DataFrame(数据=d)
d={'val':['old','new'],'lower':[1970,1986],'upper':[1985,1995]}
gen\U Ref\U df=pd.数据帧(数据=d)
#将for循环和函数调用替换为一行
#在df中创建一个新列“Gen”,并用两个条件获得的Gen val填充每一行

df['Gen']=Gen_Ref_df[(df['byear']>=Gen_Ref_df.lower)和(df['byear']请提供一个,以及一些输入,以及当前和预期的输出。谢谢,但我可能没有很好地解释这个问题。我正在尝试在df中创建一个名为“Gen”的新列,而不需要先保存到另一个df,如mod_df。如果我尝试df=mod_df.append(x),我会得到错误“分配前引用的局部变量‘df’”您是否尝试过
df['Get']=df[(df['byear']>=lower)&(df['byear']获取以下值错误:传递的项目数错误11,位置意味着1这可能是因为
df[(df['byear']>=lower)&(df['byear']
df:

   Name  byear Gen  
0  John  1980  old  
1  Mary  1990  new  
   name  byear  Gen
0  John   1980  old
1  Mary   1990  new