我有以下 pandas 数据框,我想用 D 列中的值按行方式填充 A-C 列中的 NaN。是否有明确的方法来执行此操作,我可以定义所有 NaN 应该依赖按行显示 D 列中的值?我找不到在 fillna() 中明确执行此操作的方法。
请注意,还有其他E-Z 列,它们有自己的 NaN,并且可能有其他填充 NaN 的规则,应该保持不变。
A B C D E
158 158 158 177 ...
158 158 158 177 ...
NaN NaN NaN 177 ...
158 158 158 177 ...
NaN NaN NaN 177 ...
只想将此用于 A-C 列:
A B C D E
158 158 158 177 ...
158 158 158 177 ...
177 177 177 177 ...
158 158 158 177 ...
177 177 177 177 ...
谢谢。
最佳答案
使用fillna
函数:
df.fillna(axis=1, method='backfill')
将在其他列中没有 NaN 的情况下执行。
如果有并且你想保持它们不变,我认为这种方式的唯一选择是在你的数据帧的一个子集上执行 fillna
。使用示例数据框:
In [45]: df
Out[45]:
A B C D E F
0 158 158 158 177 1 10
1 158 158 158 177 2 20
2 NaN NaN NaN 177 3 30
3 158 158 158 177 NaN 40
4 NaN NaN NaN 177 5 50
In [48]: df[['A', 'B', 'C', 'D']] = df[['A', 'B', 'C', 'D']].fillna(axis=1, method='backfill')
In [49]: df
Out[49]:
A B C D E F
0 158 158 158 177 1 10
1 158 158 158 177 2 20
2 177 177 177 177 3 30
3 158 158 158 177 NaN 40
4 177 177 177 177 5 50
更新:如果您不想依赖列顺序,您还可以指定用于填充每一行的值(如 .fillna(value=df[ 'D']
)。唯一的问题是这仅适用于系列(当它是数据框时,它会尝试映射不同的值以填充到不同的列,而不是行)。所以应用逐列进行,它有效:
In [60]: df[['A', 'B', 'C']].apply(lambda x: x.fillna(value=df['D']))
Out[60]:
A B C
0 158 158 158
1 158 158 158
2 177 177 177
3 158 158 158
4 177 177 177
关于python - 针对特定列的逐行填充?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24015379/