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 的,但你想重复这个过程吗?
我有以下 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 的,但你想重复这个过程吗?