我正在创建一个函数,它将获取一个表名和两个字段名,并使用它们进行一些排序和排名。制作这种通用的问题是我的代码的某些部分使用诸如dataframename ['fieldname']之类的语法,而其他部分只使用['fieldname']。在函数中我分别传递了表名和字段名,但是我需要在代码中连接它们 - 这似乎导致代码破坏。
使用以下代码可能最容易说明:
import pandas as pd
import numpy as np
#Some dummy data for testing
d = {'City': ['London', 'New York', 'New York', 'London', 'Paris',
'Paris', 'New York', 'New York', 'London', 'Paris'],
'Weight': [225, 454, 345, 355, 234, 198, 400, 256, 323, 310]}
df = pd.DataFrame(d) #function must take a pandas dataframe
def Rank1 (dataframe, sortby,partitionby):
sortdf = dataframe.sort(sortby, ascending=[1]) #Sort data into new dataframe
sortdf['NextValue'] = sortdf.join(sortby).shift()
Rank1(df, ['City'], ['Weight'])
函数的最后一行导致它失败。我基本上需要它说:
sortdf['NextValue'] = sortdf['City'].shift()
答案 0 :(得分:1)
如果你想要的是你说的最后一行,为什么不把列名作为字符串传递?:
#Some dummy data for testing
d = {'City': ['London', 'New York', 'New York', 'London', 'Paris',
'Paris', 'New York', 'New York', 'London', 'Paris'],
'Weight': [225, 454, 345, 355, 234, 198, 400, 256, 323, 310]}
df = pd.DataFrame(d) #function must take a pandas dataframe
df = df.ix[:11]
def Rank1 (dataframe, sortby,partitionby):
sortdf = dataframe.sort(sortby, ascending=[1]) #Sort data into new dataframe
sortdf['NextValue'] = sortdf[sortby].shift()
return dataframe
Rank1(df, 'City', 'Weight')