我需要为数据库python应用不同的函数,具体取决于此数据帧的一部分。每个函数都会创建多个列。
这是我的尝试(当然是非常简化的版本):
df=pd.DataFrame({'Type':['O','O','A'],'A':[7,9,8],'B':[8,6,5]})
def f1(df):
df['test']='A-OK'
df['test2']='A-OK2'
return df
def f2(df):
df['test']='O-OK'
df['test2']='O-OK2'
return df
def function_test(df):
df_a=df[df.Type =='A']
df_o=df[df.Type =='O']
#Applying functions
df_a=f1(df_a)
df_o=f2(df_o)
#retrieving results
df[df.Type =='A']=df_a
df[df.Type =='O']=df_o
return df
function_test(df)
数据框df_o和df_a(临时)包含好的信息,但我不能在之后的原始df中复制结果。
编辑:纠正错别字
答案 0 :(得分:1)
您的问题在于分配行中的切片:
.git/FETCH_HEAD
在改变拼写错误之后:
df[df.Type =='A']=df_a
df[df.Type =='O']=df_o
回来:
df_o=f2(df_o) # instead of f1
输出:
pandas.concat([df_a, df_o]).sort_index()
但考虑更优化:
A B Type test test2
0 7 8 O O-OK O-OK
1 9 6 O O-OK O-OK
2 8 5 A A-OK A-OK2
等等。
答案 1 :(得分:0)
df.assign(test=df.Type+'-OK', test2=df.Type+'-OK2')
将在1行
中完成#outputs
A B Type test test2
0 7 8 O O-OK O-OK
1 9 6 O O-OK O-OK
2 8 5 A A-OK A-OK