我的数据框是:
import pandas as pd
df = pd.DataFrame(
{
'a': [20, 30, 2, 5, 10]
}
)
预期产出pct_change()
为a
:
a pct_change
0 20 -50.000000
1 30 50.000000
2 2 -93.333333
3 5 150.000000
4 10 100.000000
我想df.a.iloc[0]
将 的第一个值与 40进行比较pct_change
。如果我使用df['pct_change'] = df.a.pct_change().mul(100)
,则第一个值是NaN
。
我的尝试:
def percent(a, b):
result = ((a - b) / b) * 100
return result.round(2)
df.loc[df.index[0], 'pct_change'] = percent(df.a.iloc[0], 40)
有没有更好/更有效的方法?
您可以
fill_value
在中使用关键字参数pct_change
。文档
pct_change
说:并
Series.shift
接受一个fill_value
参数来填充缺失的行。输出:
我发现真正有用的方法是使用
apply
方法和lambda
。它会检查索引并相应地执行。您也可以在 DataFrame 中执行此操作,而不会出现任何问题。因此它看起来应该是这样的:
还要注意
if row.name == 0:
,它定义它与第一个值进行比较。