熊猫/ python中的写函数

时间:2018-07-27 20:29:52

标签: python pandas

我刚刚开始学习python,并且没有太多开发背景。这是我在学习时编写的代码。

我现在想创建一个函数,该函数完全可以执行我的“ for”循环的工作,但是它需要根据不同的num(num,num1等)计算出不同的exp(exp,exp1等)

我该怎么做?

import pandas as pd
index = [0,1]
s = pd.Series(['a','b'],index= index)
t = pd.Series([1,2],index= index)
t1 = pd.Series([3,4],index= index)
df = pd.DataFrame(s,columns = ["str"])
df["num"] =t
df['num1']=t1

print (df)

exp=[]

for index, row in df.iterrows():
    if(row['str'] == 'a'):
        row['mul'] = -1 * row['num'] 
        exp.append(row['mul'])
    else:
        row['mul'] = 1 * row['num'] 
        exp.append(row['mul'])
df['exp'] = exp

print (df)

这是我试图做的,会导致错误的结果

import pandas as pd
index = [0,1]
s = pd.Series(['a','b'],index= index)
t = pd.Series([1,2],index= index)
t1 = pd.Series([3,4],index= index)
df = pd.DataFrame(s,columns = ["str"])
df["num"] =t
df['num1']=t1

def f(x):
    exp=[]

    for index, row in df.iterrows():
        if(row['str'] == 'a'):
            row['mul'] = -1 * x
            exp.append(row['mul'])
        else:
            row['mul'] = 1 * x 
            exp.append(row['mul'])
    return exp

df['exp'] = df['num'].apply(f)
df['exp1'] = df['num1'].apply(f)
df

根据以下建议,我会做:

df['exp']=np.where(df.str=='a',df['num']*-1,df['num']*1)
df['exp1']=np.where(df.str=='a',df['num1']*-1,df['num1']*1)

2 个答案:

答案 0 :(得分:1)

我认为您正在寻找np.where

df['exp']=np.where(df.str=='a',df['num']*-1,df['num']*1)
df
Out[281]: 
  str  num  num1  exp
0   a    1     3   -1
1   b    2     4    2

答案 1 :(得分:0)

正常的数据框操作:

df["exp"] = df.apply(lambda x: x["num"] * (1 if x["str"]=="a" else -1), axis=1)

数据框的数学运算:

df["exp"] = ((df["str"] == 'a')-0.5) * 2 * df["num"]