2015-03-31 133 views
2

我正在做探索性的数据分析,同时这样做我使用相同的代码行很多次。所以我才知道,为什么我不能写这个函数。但我是新来的蟒蛇我不知道如何定义一个函数exactly.So请帮我.....如何在python中编写函数?

的TextData是我的主要数据框和tonumber,smstext是我的变量

# subsetting the textdata 
mesbytonum = textdata[['tonumber', 'smstext']] 
# calculating the no.of messages by tonumber 
messbytonum_freq = mesbytonum.groupby('tonumber').agg(len) 
# resetting the index 
messbytonum_freq.reset_index(inplace=True) 
# making them in a descending order 
messbytonum_freq_result = messbytonum_freq.sort(['smstext'], ascending=[0]) 
#calcuating percentages 
messbytonum_freq_result['percentage'] = messbytonum_freq_result['smstext']/sum(messbytonum_freq_result['smstext']) 
# considering top10 
top10tonum = messbytonum_freq_result.head(10) 
# top10tonum 

我已经重复了类似的那种码20左右次,所以我想写上面的代码,使我的代码更小的功能。所以请帮助我如何定义。

在此先感谢

+0

[检查这个(https://docs.python.org/2/tutorial/controlflow.html#defining-functions) – 2015-03-31 15:16:50

+0

http://stackoverflow.com/questions/14012076/how-to-write-a-function-that-returns-a-function-in-python – Jonathan 2015-03-31 15:26:02

回答

4

函数的定义如下:

def func(arg1, arg2, argN): 
    # do something 
    # you may need to return value(s) too 

而且这样调用:

func(1,2,3) # you can use anything instead of 1,2 and 3 

这将是

def MyFunc(textdata): 
    mesbytonum = textdata[['tonumber', 'smstext']] 
    messbytonum_freq = mesbytonum.groupby('tonumber').agg(len) 
    messbytonum_freq.reset_index(inplace=True) 
    messbytonum_freq_result = messbytonum_freq.sort(['smstext'], ascending=[0]) 
    messbytonum_freq_result['percentage'] = messbytonum_freq_result['smstext']/sum(messbytonum_freq_result['smstext']) 
    top10tonum = messbytonum_freq_result.head(10) 
    return # what do you want to return? 

# use this function 
result=MyFunc(<argument here>) 

# then you need to use result somehow 

你的功能也返回乘积乐值

return spam, egg 

,你必须使用这样

mySpam, myEgg=MyFunction(<argument>) 
+0

要完成,您将通过调用result = MyFunc得到结果( )。结果将被设置为等于函数中返回*之后的任何值。 – 2015-03-31 15:26:11

+0

@Alecg_O,谢谢,我编辑了答案。 – ForceBru 2015-03-31 15:28:11

+0

你正在使用((mesbytonum = textdata [[''tonumber','smstext']]))命令内的函数,有时我的变量是不同的,如果我直接给它的数据,它总是会计算operator.so请以这种方式帮助我。如果可以,请编辑您给出的答案。非常感谢你 。 – suri1617 2015-03-31 15:41:20