关于特定列的逐行填充?

2024-04-25 03:49:57 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的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     ...  

谢谢。


Tags: 数据方法pandas定义规则选项方式nan
1条回答
网友
1楼 · 发布于 2024-04-25 03:49:57

使用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

Udate:如果不想依赖列顺序,还可以指定要用于填充每一行的值(例如.fillna(value=df['D'])。唯一的问题是,这只适用于序列(当它是数据帧时,它会尝试将不同的值映射到不同的列,而不是行)。因此,使用apply to do it column by column,它可以:

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

相关问题 更多 >