Pandas - 基于最后一个非空值和下一列的填充

Pandas - Fillna based on last non-blank value and next column

我有以下 pandas 数据框:

       A      B    C
0  100.0  110.0  100
1   90.0  120.0  110
2    NaN  105.0  105
3    NaN  100.0  103
4    NaN    NaN  107
5    NaN    NaN  110

我需要以特定方式在所有列中填充 NaN。让我们以“A”列为例:最后一个非 NaN 值是第 1 行 (90.0)。因此,对于“A”列,我需要使用以下公式填充 NaN:

Column_A-Row_1   *   Column_B-CurrentRow   /   Column_B-Row_1

例如,A列(第2行)的第一个NaN应填写:90 * 105 / 120。A列的以下NaN应填写:90 * 100 / 120。

请注意,列名可以更改,因此我无法按名称引用列。

这是预期的输出:

        A       B      C
0  100.00  110.00  100.0
1   90.00  120.00  110.0
2   78.75  105.00  105.0
3   75.00  100.00  103.0
4     NaN  103.88  107.0
5     NaN  106.80  110.0

有什么想法吗?谢谢

您可以在两个轴上使用 shift 填充数字后面的第一个 NaN:

df2 = df.combine_first(df.shift().mul(df.div(df.shift()).shift(-1,axis=1)))

输出:

        A           B    C
0  100.00  110.000000  100
1   90.00  120.000000  110
2   78.75  105.000000  105
3     NaN  100.000000  103
4     NaN  103.883495  107
5     NaN         NaN  110

虽然不清楚你是如何得到 75 的,但你想重复这个过程吗?