Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x 在dataframe中定义递归函数_Python 3.x_Pandas - Fatal编程技术网

Python 3.x 在dataframe中定义递归函数

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'],

我似乎找不到我问题的答案,所以我在这里碰碰运气。非常感谢你的帮助

我有一个熊猫数据框,它的值在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'], 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。如果你能把这个问题解决,我会非常感激。谢谢