老实说,我已经搜索了几个星期这个问题的答案,但还没有找到——我的搜索历史在这一点上是非常可耻的。也就是说,我对Python(以及一般编程(还很陌生,所以我的问题可能只是措辞不正确,而且以前也有人回答过——如果是这样的话,我很抱歉。
当一个函数运行时,我试图创建一个列表,该函数使用了创建列表名称中函数的参数,但我运气不佳。
所用数据示例:
Station Date Tmax Tmin Tavg DewPoint WetBulb Heat CodeSum PrecipTotal ... Mist Haze Rain Thunderstorm Fog Patches Drizzle Smoke Squall NoLoggedCodes
0 1 5/1/2007 83 50 67 51 56 0 NO 0.0 ... 0 0 0 0 0 0 0 0 0 1
1 1 5/2/2007 59 42 51 42 47 14 BR 0.0 ... 1 0 0 0 0 0 0 0 0 0
2 1 5/3/2007 66 46 56 40 48 9 NO 0.0 ... 0 0 0 0 0 0 0 0 0 1
3 1 5/4/2007 66 49 58 41 50 7 RA 0.0 ... 0 0 1 0 0 0 0 0 0 0
4 1 5/5/2007 66 53 60 38 49 5 NO 0.0 ... 0 0 0 0 0 0 0 0 0 1
我知道下面显示的是错误的语法,但希望它能让我了解我正在尝试的内容。函数本身(除了添加的语法错误之外(可以正常工作,但我的目标是让它也创建一个新列的列表,并且最好遵循下面显示的命名约定。有什么想法我能做到吗?
def rollingfunction(days):
"""creates new rolling mean columns for each weather station for each item in list Keys"""
WeatherCon{days}Day = [] #this line is incorrect, but I hope gives an idea of my goal
for x in Keys:
Station1[f'Last{days}DayAvg{x}'] Station1[x].rolling(days).mean()
Station2[f'Last{days}DayAvg{x}'] Station2[x].rolling(days).mean()
WeatherCon{days}Day.append([f'Last{days}DayAvg{x}']) #this line is also incorrect, but again context
#this is the list and list name that I want to create when the function is run with a call of 5.
#This list is simply the names of the new columns created by the function so I can reference these columns later.
WeatherCon5Day = ['Last5DayAvgHaze', 'Last5DayAvgPrecipTotal', 'Last5DayAvgThunderstorm', 'Last5DayAvgFog', 'Last5DayAvgPatches', 'Last5DayAvgSmoke', 'Last5DayAvgSquall', 'Last5DayAvgNoLoggedCodes', 'Last5DayAvgTavg', 'Last5DayAvgAvgSpeed', 'Last5DayAvgDewPoint']
当为5调用该函数时,它会为Keys中的每个天气模式返回新的单独列。
目前,我正在使用这些新列对蚊子生长进行回归
理想情况下,我的最终目标是能够在15-20天左右的每一天内,对蚊子种群增长的所有天气值进行回归,然后用它创建一个显示系数和p值随时间变化的折线图,以突出显示每个值何时具有最大影响(如果有的话(。显然,调用rollingfunction((15次以上并手动创建15个以上的列表来获得所需的回归值是愚蠢的、容易出错的,而且很难看。此外,我还认识到,我正在尝试创建100多个新列,这可能也很愚蠢。
我真的很感激你们能给我的任何帮助,哪怕只是指给我正确的方向。非常感谢!
看看这些:
>>> locals()
>>> globals()
>>> dir()
>>> help(setattr)
在最后一个问题上,请注意,它接受字符串的初始参数。它将允许您将一个新变量绑定到你最喜欢的命名空间,也许是函数的本地命名空间。
也就是说,你在这里真正想要的为import pandas
因此您可以利用数据帧。它们有很多功能满足您的需求。