Python 3.x 在dataframe中定义递归函数
我似乎找不到我问题的答案,所以我在这里碰碰运气。非常感谢你的帮助 我有一个熊猫数据框,它的值在Col1和Col2中。与Col2中的np.nan值不同,我想计算以下内容:今天的Col2值=前一天的Col2值乘以今天的Col1值 这应该是某种形式的递归函数。我尝试了几种答案,包括下面的for循环,但似乎都不起作用:Python 3.x 在dataframe中定义递归函数,python-3.x,pandas,Python 3.x,Pandas,我似乎找不到我问题的答案,所以我在这里碰碰运气。非常感谢你的帮助 我有一个熊猫数据框,它的值在Col1和Col2中。与Col2中的np.nan值不同,我想计算以下内容:今天的Col2值=前一天的Col2值乘以今天的Col1值 这应该是某种形式的递归函数。我尝试了几种答案,包括下面的for循环,但似乎都不起作用: df = pd.read_excel('/Users/fhggshgf/Desktop/test.xlsx') df.index = df.date df.drop(['date'],
df = pd.read_excel('/Users/fhggshgf/Desktop/test.xlsx')
df.index = df.date
df.drop(['date'], axis=1, inplace=True)
for i in range(1, len(df)):
fill_value = df['Col2'].iloc[i - 1]
finaldf['Col2'].fillna(fill_value, inplace=True)
你可以试试这样的东西
import pandas as pd
import numpy as np
df = pd.DataFrame({'date': [1,2,3,4,5,6],
'col_1': [951, 909, 867, 844, 824, 826],
'col_2': [179, 170, 164, 159, 153, 149]})
col_2_update_list = []
for i, row in df.iterrows():
if i != 0:
today_col_1 = df.at[i,'col_1']
prev_day_col_2 = df.at[i-1,'col_2']
new_col_2_val = prev_day_col_2 * today_col_1
col_2_update_list.append(new_col_2_val)
else:
col_2_update_list.append(np.nan)
df['updated_col_2'] = col_2_update_list
你可以试试这样的
import pandas as pd
import numpy as np
df = pd.DataFrame({'date': [1,2,3,4,5,6],
'col_1': [951, 909, 867, 844, 824, 826],
'col_2': [179, 170, 164, 159, 153, 149]})
col_2_update_list = []
for i, row in df.iterrows():
if i != 0:
today_col_1 = df.at[i,'col_1']
prev_day_col_2 = df.at[i-1,'col_2']
new_col_2_val = prev_day_col_2 * today_col_1
col_2_update_list.append(new_col_2_val)
else:
col_2_update_list.append(np.nan)
df['updated_col_2'] = col_2_update_list
这样可以避免使用循环,但需要创建两个新列:
将熊猫作为pd导入
将numpy作为np导入
导入系统
df=pd.DataFrame({'date':[1,2,3,4,5,6],
"上校1":[951909867844824826],,
“col_2”:[179,np.nan,164,159,np.nan,149]})
打印(df)
#比较两列
df['col_4']=df['col_2'].fillna(method='ffill')*df['col_1']
df['col_3']=df['col_2'].fillna(sys.maxsize)
df['col_2']=df['col_4','col_3'].min(轴=1).astype(int)
df=df.drop(['col_4','col_3',],轴=1)
打印(df)
这避免了使用循环,但您需要创建两个新列:
将熊猫作为pd导入
将numpy作为np导入
导入系统
df=pd.DataFrame({'date':[1,2,3,4,5,6],
"上校1":[951909867844824826],,
“col_2”:[179,np.nan,164,159,np.nan,149]})
打印(df)
#比较两列
df['col_4']=df['col_2'].fillna(method='ffill')*df['col_1']
df['col_3']=df['col_2'].fillna(sys.maxsize)
df['col_2']=df['col_4','col_3'].min(轴=1).astype(int)
df=df.drop(['col_4','col_3',],轴=1)
打印(df)
您说前一天的Col2值乘以今天的Col1值,但您的代码没有显示任何乘法。真的是乘法吗?您可以添加预期的输出吗?为了将来的参考,如果您格式化数据帧的输出(至少是其中的一部分)并将其包含在您的问题中,这会很有帮助。有关格式的说明,请参见。您说的是前一天的Col2值乘以今天的Col1值,但您的代码没有显示任何乘法。真的是乘法吗?您可以添加预期的输出吗?为了将来的参考,如果您格式化数据帧的输出(至少是其中的一部分)并将其包含在您的问题中,这会很有帮助。有关格式的解释,请参阅。非常感谢,非常感谢。很高兴帮助@Olivier44。如果你能把这个问题解决,我会非常感激。谢谢非常感谢,非常感谢。很高兴帮助@Olivier44。如果你能把这个问题解决,我会非常感激。谢谢