【发布时间】:2016-11-22 17:12:37
【问题描述】:
我在 pandas 数据框中有三列。
df = pd.DataFrame({'month':[1,2,3,4,5,6,7,8,9,10,11,12],
'day':[10,23,16,30,1,23,3,28,29,1,4,2],
'year':[1990,1990,1990,1990,1990,1990,1990,1990,1990,1990,1990,1990]})
我想在另一列中返回水年,该列定义为 9 月 28 日之后的任何一天的 +1 年。例如,1990 年 9 月 29 日是 1991 年的水年。
我有一个独立工作的函数
def wy(month, day, year):
if month >8 and day > 28:
year = year + 1
else:
if month>9:
year = year + 1
else:
year = year
return year
wy(9,30,2000)
但是
df['wy'] = wy(df['month'],df['day'],df['year'])
返回错误
ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
当我尝试将其应用于数据框时。我查看了文档和其他问题,并尝试了多种其他功能,例如
def wy(month, day, year):
if any(month >8 & day > 28):
year = year + 1
else:
if any(month>9):
year = year + 1
else:
year = year
return year
def wy(month, day, year):
if any((month >8 & day > 28)|month>9):
year = year + 1
return year
但我仍然返回错误。我也试过一个 lambda 表达式(不是很漂亮)
df['wy'] = (lambda x,y,z:z+1 if (x >8 & y > 28)|y>9 else z, df['month'],df['day'],df['year'])
感谢您的帮助
【问题讨论】: