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

这避免了循环的使用,但您需要创建 2 个新列:

import pandas as pd
import numpy as np
import sys
df = pd.DataFrame({'date': [1,2,3,4,5,6],
'col_1': [951, 909, 867, 844, 824, 826],
'col_2': [179, np.nan, 164, 159, np.nan, 149]})
print(df)
# Compare 2 columns
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(axis=1).astype(int)
df = df.drop(['col_4', 'col_3'], axis = 1)
print(df)

最新更新