这段代码返回10,这是我所期望的
for i in range(5):
if i == 0:
output = i
else:
output += i
print(output)
为什么这段代码只返回在语句的if部分创建的数据帧(即当i == 0时)?
for i in range(5):
if i == 0:
output = pd.DataFrame(np.random.randn(5, 2))
else:
output.append(pd.DataFrame(np.random.randn(5, 2))
print('final', output)
以上是我对以下代码的问题的MVCE:
感兴趣的更多内容:
for index, row in per_dmd_df.iterrows():
if index == 0:
output = pd.DataFrame(dmd_flow(row.balance, dt.date(2018,1,31),12,.05,0,.03,'monthly'))
else:
output.append(pd.DataFrame(dmd_flow(row.balance, dt.date(2018,1,31),12,.05,0,.03,'monthly')))
print(output)
我有一个输入DataFrame,每个产品有一行,包含余额,费率等。我希望每个DF行中的数据调用dmd_flow函数(返回一个在pd.Dataframe()中调用的生成器返回一个12个月前瞻性余额预测)根据dmd_flow函数中的参数预测每种产品余额的变化。然后我会添加所有更改以得出余额的净变化(使用分组日期和总和余额完成)。
每次调用都会根据需要创建新的DataFrame:
pd.DataFrame(dmd_flow(row.balance, dt.date(2018,1,31),12,.05,0,.03,'monthly'))
但是append不能扩展输出DataFrame。
答案 0 :(得分:1)
因为(与list.append
不同)DataFrame.append
不是就地操作。有关更多信息,请参阅文档。您应该将结果分配回来:
df = df.append(...)
虽然在这种情况下,如果您无法对您的功能进行矢量化,我建议您使用apply
之类的内容:
df['balance'].apply(
dmd_flow, args=(dt.date(2018,1,31), 12, .05, 0, .03, 'monthly')
)
隐藏了循环,因此您不必担心索引。确保您的函数以这样的方式编写,以便支持标量参数。