在Dataframe的不同部分应用函数

时间:2018-05-28 15:33:20

标签: python pandas

我需要为数据库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中复制结果。

编辑:纠正错别字

2 个答案:

答案 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