英文:
apply function in Python throws the error - object not iterable
问题
我在应用函数时遇到了错误。对于每个条件,我应该在当前行中参考前一行的值以及当前行中的下一行值。如果我有多个引用前一行值的情况,那么就会出现错误。请建议我以不同的方式解决这个问题。
import pandas as pd
data = {
'A': [1, 1, 1, 1, 1],
'B': [6, 7, 8, 9, 10]
}
df = pd.DataFrame(data)
# 定义一个自定义函数,使用前一行和后一行的值
def process_row(row):
previous_row = df.shift(1).loc[row.name]
next_row = df.shift(-1).loc[row.name]
# 访问前一行和后一行的值
prev_value_A = previous_row['A']
prev_value_B = previous_row['B']
next_value_A = next_row['A']
next_value_B = next_row['B']
# 使用前一行和后一行的值进行计算
result = {}
result['x'] = ((prev_value_B - prev_value_A) - (next_value_B - next_value_A))
return result
# 将该函数应用于DataFrame中的每一行
df = df.apply(process_row, axis=1)
print(df)
英文:
I am getting an error while applying a function. For each condition, I am supposed to refer to the previous row values and also the next values while present in the current row. If i have more than one reference of previous row values, then it is giving an error. Please advise how do i fix this in a different way.
import pandas as pd
data = {
'A': [1, 1, 1, 1, 1],
'B': [6, 7, 8, 9, 10]
}
df = pd.DataFrame(data)
# Define a custom function that uses values from the previous and next rows
def process_row(row):
previous_row = df.shift(1).loc[row.name]
next_row = df.shift(-1).loc[row.name]
# Access values from previous and next rows
prev_value_A = previous_row['A']
prev_value_B = previous_row['B']
next_value_A = next_row['A']
next_value_B = next_row['B']
# Perform calculations using previous and next values
result = {}
result['x'] = ((prev_value_B - prev_value_A) - (next_value_B - next_value_A))
return result
# Apply the function to each row in the DataFrame
df = df.apply(process_row, axis=1)
print(df)
答案1
得分: 2
你不应该使用函数和 apply
来实现这个,直接使用 shift
来向量化你的计算:
s = df['B'] - df['A']
df['x'] = s.shift() - s.shift(-1)
输出:
A B x
0 1 6 NaN
1 1 7 -2.0
2 1 8 -2.0
3 1 9 -2.0
4 1 10 NaN
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论