gpt4 book ai didi

python - forwardfill结合python pandas中的计算(方法='ffill' * xyz)

转载 作者:太空宇宙 更新时间:2023-11-03 15:07:52 25 4
gpt4 key购买 nike

我需要用一个计算来填充 NaN 空间,这取决于数据帧中的先前值 = df.我到目前为止是这样的:

df = pd.DataFrame({'a': [None] * 6, 'b': [2, 3, 10, 3, 5, 8]})
df["c"] =np.NaN

df["c"][0] = 1
df["c"][2] = 3

i = 1
while i<10:
df.c.fillna(df.c.shift(i)*df.b,inplace=True)
i+1

不幸的是,这个 while 循环的解决方案不起作用,对于 pandas 来说肯定是一个非常糟糕的解决方案。所以我正在寻找的是一种

df.c.fillna(method='ffill'*df.b,inplace=True)

我知道这也行不通,我只是认为这让我更清楚我在寻找什么。

在填充数据框之前它看起来像这样:

   b   c
0 2 1
1 3 NaN
2 10 3
3 3 NaN
4 5 NaN
5 8 NaN

期望的结果应该是这样的:

      b   c
0 2 1 # nothing filled in since data is set from df["c"][0] = 1
1 3 3 # fill in previous c * b = 1 * 3 = 3
2 10 3 # nothing filled in since data is set from df["c"][2] = 3
3 3 9 # fill in previous c * b = 3 * 3 = 9
4 5 45 # fill in previous c * b = 9 * 5 = 45
5 8 360 # fill in previous c * b = 45 * 8 = 360

所以基本上:如果没有可用数据,应该用计算来填充。

最佳答案

我想不出在单个循环中执行此操作的方法,这里的问题是你想要某种滚动应用,然后可以查看前一行,这里的问题是前一行更新将在 apply 完成之前无法观察到,例如以下工作,因为我们运行了 apply 3 次。这不是很好的海事组织:

In [103]:
def func(x):
if pd.notnull(x['c']):
return x['c']
else:
return df.iloc[x.name - 1]['c'] * x['b']
df['c'] = df.apply(func, axis =1)
df['c'] = df.apply(func, axis =1)
df['c'] = df.apply(func, axis =1)
df

Out[103]:
a b c
0 None 2 1
1 None 3 3
2 None 10 3
3 None 3 9
4 None 5 45
5 None 8 360

关于python - forwardfill结合python pandas中的计算(方法='ffill' * xyz),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30641509/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com